From 630d4400261f146e2edfb510666dfc77b21cd21f Mon Sep 17 00:00:00 2001 From: Simon Derr Date: Fri, 10 Aug 2012 15:52:06 +0200 Subject: [PATCH] --- yaml --- r: 333409 b: refs/heads/master c: 43def35c1030d91a7414936c7c1b416828b20afb h: refs/heads/master i: 333407: bd7ca2221bcf2774690144e5dbf4181930d52b27 v: v3 --- [refs] | 2 +- trunk/net/9p/client.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1b70506d951a..bf4f6da384fa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ba413ab2ccc49e6aa1ebc3523a75635b5e4a0494 +refs/heads/master: 43def35c1030d91a7414936c7c1b416828b20afb diff --git a/trunk/net/9p/client.c b/trunk/net/9p/client.c index 8260f132b32e..34d417670935 100644 --- a/trunk/net/9p/client.c +++ b/trunk/net/9p/client.c @@ -76,6 +76,20 @@ inline int p9_is_proto_dotu(struct p9_client *clnt) } EXPORT_SYMBOL(p9_is_proto_dotu); +/* + * Some error codes are taken directly from the server replies, + * make sure they are valid. + */ +static int safe_errno(int err) +{ + if ((err > 0) || (err < -MAX_ERRNO)) { + p9_debug(P9_DEBUG_ERROR, "Invalid error code %d\n", err); + return -EPROTO; + } + return err; +} + + /* Interpret mount option for protocol version */ static int get_protocol_version(char *s) { @@ -782,7 +796,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) return req; reterr: p9_free_req(c, req); - return ERR_PTR(err); + return ERR_PTR(safe_errno(err)); } /** @@ -865,7 +879,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, return req; reterr: p9_free_req(c, req); - return ERR_PTR(err); + return ERR_PTR(safe_errno(err)); } static struct p9_fid *p9_fid_create(struct p9_client *clnt)