diff options
author | jh <jh@FreeBSD.org> | 2012-01-06 09:17:34 +0000 |
---|---|---|
committer | jh <jh@FreeBSD.org> | 2012-01-06 09:17:34 +0000 |
commit | 3ff26fa74b4042772f04e1b17ae7cd901553c2d3 (patch) | |
tree | f4cac7715e7bb3bbb6cbc9fc5578bd7d07682cf2 /sys | |
parent | cba3fc2b82cd31e22ac5bda93e7edcfc1d8118ee (diff) | |
download | FreeBSD-src-3ff26fa74b4042772f04e1b17ae7cd901553c2d3.zip FreeBSD-src-3ff26fa74b4042772f04e1b17ae7cd901553c2d3.tar.gz |
Check the return value of sbuf_finish() in pfs_readlink() and return
ENAMETOOLONG if the buffer overflowed.
Approved by: des
MFC after: 2 weeks
Diffstat (limited to 'sys')
-rw-r--r-- | sys/fs/pseudofs/pseudofs_vnops.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/fs/pseudofs/pseudofs_vnops.c b/sys/fs/pseudofs/pseudofs_vnops.c index 3f0c00e..7d192e9 100644 --- a/sys/fs/pseudofs/pseudofs_vnops.c +++ b/sys/fs/pseudofs/pseudofs_vnops.c @@ -891,7 +891,11 @@ pfs_readlink(struct vop_readlink_args *va) PFS_RETURN (error); } - sbuf_finish(&sb); + if (sbuf_finish(&sb) != 0) { + sbuf_delete(&sb); + PFS_RETURN (ENAMETOOLONG); + } + error = uiomove_frombuf(sbuf_data(&sb), sbuf_len(&sb), uio); sbuf_delete(&sb); PFS_RETURN (error); |