summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_vnops.c
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2010-05-05 16:44:25 +0000
committertrasz <trasz@FreeBSD.org>2010-05-05 16:44:25 +0000
commit402e3baadee30786a2a2fa508b9b7bec572da072 (patch)
treea3e31897fa4432edd5136dad2f999d5ce286bc3c /sys/kern/vfs_vnops.c
parenta3da7d7e6937462db7db7ba830332b719a5a46fa (diff)
downloadFreeBSD-src-402e3baadee30786a2a2fa508b9b7bec572da072.zip
FreeBSD-src-402e3baadee30786a2a2fa508b9b7bec572da072.tar.gz
Move checking against RLIMIT_FSIZE into one place, vn_rlimit_fsize().
Reviewed by: kib
Diffstat (limited to 'sys/kern/vfs_vnops.c')
-rw-r--r--sys/kern/vfs_vnops.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 838f8f7..edc7ea8 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
#include <sys/bio.h>
#include <sys/buf.h>
#include <sys/filio.h>
+#include <sys/resourcevar.h>
#include <sys/sx.h>
#include <sys/ttycom.h>
#include <sys/conf.h>
@@ -1338,3 +1339,21 @@ vn_vget_ino(struct vnode *vp, ino_t ino, int lkflags, struct vnode **rvp)
}
return (error);
}
+
+int
+vn_rlimit_fsize(const struct vnode *vp, const struct uio *uio, const struct thread *td)
+{
+ if (vp->v_type != VREG || td == NULL)
+ return (0);
+
+ PROC_LOCK(td->td_proc);
+ if (uio->uio_offset + uio->uio_resid >
+ lim_cur(td->td_proc, RLIMIT_FSIZE)) {
+ psignal(td->td_proc, SIGXFSZ);
+ PROC_UNLOCK(td->td_proc);
+ return (EFBIG);
+ }
+ PROC_UNLOCK(td->td_proc);
+
+ return (0);
+}
OpenPOWER on IntegriCloud