Module Name: src Committed By: jmcneill Date: Sun Oct 2 17:39:40 UTC 2011
Modified Files: src/sys/dev/i2c: i2c.c Log Message: I2C_IOCTL_EXEC: only allow i2c write ops if the device was opened for writing To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/dev/i2c/i2c.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/i2c/i2c.c diff -u src/sys/dev/i2c/i2c.c:1.31 src/sys/dev/i2c/i2c.c:1.32 --- src/sys/dev/i2c/i2c.c:1.31 Sun Oct 2 16:39:47 2011 +++ src/sys/dev/i2c/i2c.c Sun Oct 2 17:39:40 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: i2c.c,v 1.31 2011/10/02 16:39:47 jmcneill Exp $ */ +/* $NetBSD: i2c.c,v 1.32 2011/10/02 17:39:40 jmcneill Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.31 2011/10/02 16:39:47 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.32 2011/10/02 17:39:40 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -47,6 +47,7 @@ __KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.31 #include <sys/kthread.h> #include <sys/proc.h> #include <sys/kernel.h> +#include <sys/fcntl.h> #include <sys/module.h> #include <dev/i2c/i2cvar.h> @@ -421,7 +422,7 @@ iic_close(dev_t dev, int flag, int fmt, } static int -iic_ioctl_exec(struct iic_softc *sc, i2c_ioctl_exec_t *iie) +iic_ioctl_exec(struct iic_softc *sc, i2c_ioctl_exec_t *iie, int flag) { i2c_tag_t ic = sc->sc_tag; uint8_t buf[I2C_EXEC_MAX_BUFLEN]; @@ -438,6 +439,8 @@ iic_ioctl_exec(struct iic_softc *sc, i2c return EINVAL; if (iie->iie_buf != NULL && iie->iie_buflen == 0) return EINVAL; + if (I2C_OP_WRITE_P(iie->iie_op) && (flag & FWRITE) == 0) + return EBADF; #if 0 /* Disallow userspace access to devices that have drivers attached. */ @@ -475,7 +478,7 @@ iic_ioctl(dev_t dev, u_long cmd, void *d switch (cmd) { case I2C_IOCTL_EXEC: - return iic_ioctl_exec(sc, (i2c_ioctl_exec_t *)data); + return iic_ioctl_exec(sc, (i2c_ioctl_exec_t *)data, flag); default: return ENODEV; }