summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_pc98.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-12-12 10:09:05 +0000
committerphk <phk@FreeBSD.org>2004-12-12 10:09:05 +0000
commit35b3c9fdfbd8e466654ebad62b044a7d3c01f3b7 (patch)
treec331a8f51b025987771bf29e5baf7455e29185d9 /sys/geom/geom_pc98.c
parentcfac934dde18f8d08432e5509b2dd827eb77be2c (diff)
downloadFreeBSD-src-35b3c9fdfbd8e466654ebad62b044a7d3c01f3b7.zip
FreeBSD-src-35b3c9fdfbd8e466654ebad62b044a7d3c01f3b7.tar.gz
Pass the file->flags down to geom ioctl handlers.
Reject certain ioctls if write permission is not indicated. Bump geom API version. Reported by: Ruben de Groot <mail25@bzerk.org>
Diffstat (limited to 'sys/geom/geom_pc98.c')
-rw-r--r--sys/geom/geom_pc98.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/geom/geom_pc98.c b/sys/geom/geom_pc98.c
index f30cb9d..d887b25 100644
--- a/sys/geom/geom_pc98.c
+++ b/sys/geom/geom_pc98.c
@@ -37,6 +37,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>
@@ -148,7 +149,7 @@ g_pc98_modify(struct g_geom *gp, struct g_pc98_softc *ms, u_char *sec)
}
static int
-g_pc98_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td)
+g_pc98_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td)
{
struct g_geom *gp;
struct g_pc98_softc *ms;
@@ -162,6 +163,8 @@ g_pc98_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td)
switch(cmd) {
case DIOCSPC98: {
+ if (!(fflag & FWRITE))
+ return (EPERM);
DROP_GIANT();
g_topology_lock();
/* Validate and modify our slicer instance to match. */
OpenPOWER on IntegriCloud