qemu-e2k/hw/9pfs
Christian Schoenebeck e16453a31a 9pfs: require msize >= 4096
A client establishes a session by sending a Tversion request along with a
'msize' parameter which client uses to suggest server a maximum message
size ever to be used for communication (for both requests and replies)
between client and server during that session. If client suggests a 'msize'
smaller than 4096 then deny session by server immediately with an error
response (Rlerror for "9P2000.L" clients or Rerror for "9P2000.u" clients)
instead of replying with Rversion.

So far any msize submitted by client with Tversion was simply accepted by
server without any check. Introduction of some minimum msize makes sense,
because e.g. a msize < 7 would not allow any subsequent 9p operation at
all, because 7 is the size of the header section common by all 9p message
types.

A substantial higher value of 4096 was chosen though to prevent potential
issues with some message types. E.g. Rreadlink may yield up to a size of
PATH_MAX which is usually 4096, and like almost all 9p message types,
Rreadlink is not allowed to be truncated by the 9p protocol. This chosen
size also prevents a similar issue with Rreaddir responses (provided client
always sends adequate 'count' parameter with Treaddir), because even though
directory entries retrieval may be split up over several T/Rreaddir
messages; a Rreaddir response must not truncate individual directory entries
though. So msize should be large enough to return at least one directory
entry with the longest possible file name supported by host. Most file
systems support a max. file name length of 255. Largest known file name
lenght limit would be currently ReiserFS with max. 4032 bytes, which is
also covered by this min. msize value because 4032 + 35 < 4096.

Furthermore 4096 is already the minimum msize of the Linux kernel's 9pfs
client.

Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Reviewed-by: Greg Kurz <groug@kaod.org>
Message-Id: <8ceecb7fb9fdbeabbe55c04339349a36929fb8e3.1579567019.git.qemu_oss@crudebyte.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
2020-02-08 09:28:43 +01:00
..
9p-local.c 9p: local: always return -1 on error in local_unlinkat_common 2020-01-20 15:11:39 +01:00
9p-local.h
9p-posix-acl.c
9p-proxy.c 9pfs: make Error **errp const where it is appropriate 2019-12-18 08:43:19 +01:00
9p-proxy.h
9p-synth.c
9p-synth.h
9p-util.c
9p-util.h
9p-xattr-user.c 9pfs: local: lremovexattr: don't follow symlinks 2017-02-28 11:21:15 +01:00
9p-xattr.c
9p-xattr.h
9p.c 9pfs: require msize >= 4096 2020-02-08 09:28:43 +01:00
9p.h 9pfs: require msize >= 4096 2020-02-08 09:28:43 +01:00
codir.c
cofile.c
cofs.c
coth.c Include qemu/main-loop.h less 2019-08-16 13:31:52 +02:00
coth.h
coxattr.c
Kconfig
Makefile.objs
trace-events 9p: unsigned type for type, version, path 2019-10-10 11:36:04 +02:00
virtio-9p-device.c * Register qdev properties as class properties (Marc-André) 2020-01-27 09:44:04 +00:00
virtio-9p.h
xen-9p-backend.c 9p: init_in_iov_from_pdu can truncate the size 2020-01-20 15:11:39 +01:00
xen-9pfs.h