Date: Thu, 23 May 1996 08:04:34 -0500 (CDT) From: Alex Nash <alex@fa.tdktca.com> To: FreeBSD-gnats-submit@freebsd.org Subject: kern/1238: LKM security patch for 2.1.0-STABLE Message-ID: <199605231304.IAA28940@fa.tdktca.com> Resent-Message-ID: <199605231310.GAA10811@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 1238 >Category: kern >Synopsis: LKM security improvement in -current not merged into -stable >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu May 23 06:10:02 PDT 1996 >Last-Modified: >Originator: Alex Nash >Organization: >Release: FreeBSD 2.1-STABLE i386 >Environment: FreeBSD 2.1.0-STABLE systems using LKMs. >Description: FreeBSD -current disallows loading/unloading of LKMs when securelevel is greater than 0. This addition was not merged into -stable. >How-To-Repeat: Perform module load/unload operations while securelevel > 0. >Fix: Test for securelevel > 0 during ioctl() operations. *** /usr/src/sys/kern/kern_lkm.c Thu Sep 14 03:44:28 1995 --- kern_lkm.c Thu May 23 07:52:03 1996 *************** *** 191,197 **** switch(cmd) { case LMRESERV: /* reserve pages for a module */ ! if ((flag & FWRITE) == 0) /* only allow this if writing */ return EPERM; resrvp = (struct lmc_resrv *)data; --- 191,198 ---- switch(cmd) { case LMRESERV: /* reserve pages for a module */ ! if ((flag & FWRITE) == 0 || securelevel > 0) ! /* only allow this if writing */ return EPERM; resrvp = (struct lmc_resrv *)data; *************** *** 231,237 **** break; case LMLOADBUF: /* Copy in; stateful, follows LMRESERV */ ! if ((flag & FWRITE) == 0) /* only allow this if writing */ return EPERM; loadbufp = (struct lmc_loadbuf *)data; --- 232,239 ---- break; case LMLOADBUF: /* Copy in; stateful, follows LMRESERV */ ! if ((flag & FWRITE) == 0 || securelevel > 0) ! /* only allow this if writing */ return EPERM; loadbufp = (struct lmc_loadbuf *)data; *************** *** 266,272 **** break; case LMUNRESRV: /* discard reserved pages for a module */ ! if ((flag & FWRITE) == 0) /* only allow this if writing */ return EPERM; lkmunreserve(); /* coerce state to LKM_IDLE */ --- 268,275 ---- break; case LMUNRESRV: /* discard reserved pages for a module */ ! if ((flag & FWRITE) == 0 || securelevel > 0) ! /* only allow this if writing */ return EPERM; lkmunreserve(); /* coerce state to LKM_IDLE */ *************** *** 276,282 **** break; case LMREADY: /* module loaded: call entry */ ! if ((flag & FWRITE) == 0) /* only allow this if writing */ return EPERM; switch (lkm_state) { --- 279,286 ---- break; case LMREADY: /* module loaded: call entry */ ! if ((flag & FWRITE) == 0 || securelevel > 0) ! /* only allow this if writing */ return EPERM; switch (lkm_state) { *************** *** 338,344 **** break; case LMUNLOAD: /* unload a module */ ! if ((flag & FWRITE) == 0) /* only allow this if writing */ return EPERM; unloadp = (struct lmc_unload *)data; --- 342,349 ---- break; case LMUNLOAD: /* unload a module */ ! if ((flag & FWRITE) == 0 || securelevel > 0) ! /* only allow this if writing */ return EPERM; unloadp = (struct lmc_unload *)data; >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199605231304.IAA28940>