summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjh <jh@FreeBSD.org>2012-01-06 09:17:34 +0000
committerjh <jh@FreeBSD.org>2012-01-06 09:17:34 +0000
commit3ff26fa74b4042772f04e1b17ae7cd901553c2d3 (patch)
treef4cac7715e7bb3bbb6cbc9fc5578bd7d07682cf2
parentcba3fc2b82cd31e22ac5bda93e7edcfc1d8118ee (diff)
downloadFreeBSD-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
-rw-r--r--sys/fs/pseudofs/pseudofs_vnops.c6
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);
OpenPOWER on IntegriCloud