diff options
Diffstat (limited to 'sys/geom/geom_mbr.c')
-rw-r--r-- | sys/geom/geom_mbr.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/geom/geom_mbr.c b/sys/geom/geom_mbr.c index 2e19757..bedfa0c 100644 --- a/sys/geom/geom_mbr.c +++ b/sys/geom/geom_mbr.c @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include <sys/endian.h> #include <sys/systm.h> #include <sys/kernel.h> +#include <sys/fcntl.h> #include <sys/malloc.h> #include <sys/bio.h> #include <sys/lock.h> @@ -153,7 +154,7 @@ g_mbr_modify(struct g_geom *gp, struct g_mbr_softc *ms, u_char *sec0) } static int -g_mbr_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td) +g_mbr_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td) { struct g_geom *gp; struct g_mbr_softc *ms; @@ -169,6 +170,8 @@ g_mbr_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td) error = 0; switch(cmd) { case DIOCSMBR: { + if (!(fflag & FWRITE)) + return (EPERM); DROP_GIANT(); g_topology_lock(); cp = LIST_FIRST(&gp->consumer); |