diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-01-02 12:11:01 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-01-02 12:11:01 -0800 |
commit | 85f78456f286da46fb054c7d45e4193cb757ac83 (patch) | |
tree | a33bfd4efc03c05a12944456c2f217c83ce5f9d6 /net | |
parent | cacf02df4b84d261d76db3d290ccb6b951df28c0 (diff) | |
parent | 574d356b7a02c7e1b01a1d9cba8a26b3c2888f45 (diff) | |
download | lwn-85f78456f286da46fb054c7d45e4193cb757ac83.tar.gz lwn-85f78456f286da46fb054c7d45e4193cb757ac83.zip |
Merge tag '9p-for-4.21' of git://github.com/martinetd/linux
Pull 9p updates from Dominique Martinet:
"Missing prototype warning fix and a syzkaller fix when a 9p server
advertises a too small msize"
* tag '9p-for-4.21' of git://github.com/martinetd/linux:
9p/net: put a lower bound on msize
net/9p: include trans_common.h to fix missing prototype warning.
Diffstat (limited to 'net')
-rw-r--r-- | net/9p/client.c | 21 | ||||
-rw-r--r-- | net/9p/trans_common.c | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/net/9p/client.c b/net/9p/client.c index 2c9a17b9b46b..357214a51f13 100644 --- a/net/9p/client.c +++ b/net/9p/client.c @@ -181,6 +181,12 @@ static int parse_opts(char *opts, struct p9_client *clnt) ret = r; continue; } + if (option < 4096) { + p9_debug(P9_DEBUG_ERROR, + "msize should be at least 4k\n"); + ret = -EINVAL; + continue; + } clnt->msize = option; break; case Opt_trans: @@ -983,10 +989,18 @@ static int p9_client_version(struct p9_client *c) else if (!strncmp(version, "9P2000", 6)) c->proto_version = p9_proto_legacy; else { + p9_debug(P9_DEBUG_ERROR, + "server returned an unknown version: %s\n", version); err = -EREMOTEIO; goto error; } + if (msize < 4096) { + p9_debug(P9_DEBUG_ERROR, + "server returned a msize < 4096: %d\n", msize); + err = -EREMOTEIO; + goto error; + } if (msize < c->msize) c->msize = msize; @@ -1043,6 +1057,13 @@ struct p9_client *p9_client_create(const char *dev_name, char *options) if (clnt->msize > clnt->trans_mod->maxsize) clnt->msize = clnt->trans_mod->maxsize; + if (clnt->msize < 4096) { + p9_debug(P9_DEBUG_ERROR, + "Please specify a msize of at least 4k\n"); + err = -EINVAL; + goto free_client; + } + err = p9_client_version(clnt); if (err) goto close_trans; diff --git a/net/9p/trans_common.c b/net/9p/trans_common.c index b718db2085b2..3dff68f05fb9 100644 --- a/net/9p/trans_common.c +++ b/net/9p/trans_common.c @@ -14,6 +14,7 @@ #include <linux/mm.h> #include <linux/module.h> +#include "trans_common.h" /** * p9_release_pages - Release pages after the transaction. |