Date: Mon, 27 May 1996 20:50:13 -0500 (CDT) From: Alex Nash <alex@zen.nash.org> To: FreeBSD-gnats-submit@freebsd.org Cc: phk@freebsd.org Subject: kern/1267: IPFW: prevent deletion of default policy Message-ID: <199605280150.UAA00816@zen.nash.org> Resent-Message-ID: <199605280200.TAA20338@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 1267 >Category: kern >Synopsis: Kernel allows deletion of default policy entry >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon May 27 19:00:04 PDT 1996 >Last-Modified: >Originator: Alex Nash >Organization: >Release: FreeBSD 2.1-STABLE i386 >Environment: 2.1.0-STABLE/CURRENT running IPFW. >Description: The kernel allows the default policy (chain entry 65535) to be deleted when it should not. >How-To-Repeat: # ipfw del 65535 # ipfw l >Fix: NOTE: These diffs are against those submitted in kern/1219. The version numbers do not correspond to those in the FreeBSD CVS tree. The fix consists of a single line change to line 541. The other diffs are part of a work in progress: - Formatting fix (from my style->BSD) - Undocumented feature: disallow IPFW manipulation when securelevel > 2. Index: ip_fw.c =================================================================== RCS file: /home/alex/cvs/sys/netinet/ip_fw.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** ip_fw.c 1996/05/19 18:31:09 1.3 --- ip_fw.c 1996/05/28 01:15:27 1.4 *************** *** 11,17 **** * * This software is provided ``AS IS'' without any warranties of any kind. * ! * $Id: ip_fw.c,v 1.3 1996/05/19 18:31:09 alex Exp $ */ /* --- 11,17 ---- * * This software is provided ``AS IS'' without any warranties of any kind. * ! * $Id: ip_fw.c,v 1.4 1996/05/28 01:15:27 alex Exp $ */ /* *************** *** 538,544 **** s = splnet(); fcp = chainptr->lh_first; ! if (fcp->rule->fw_number != (u_short)-1) { for (; fcp; fcp = fcp->chain.le_next) { if (fcp->rule->fw_number == frwl->fw_number) { LIST_REMOVE(fcp, chain); --- 538,544 ---- s = splnet(); fcp = chainptr->lh_first; ! if (frwl->fw_number != (u_short)-1) { for (; fcp; fcp = fcp->chain.le_next) { if (fcp->rule->fw_number == frwl->fw_number) { LIST_REMOVE(fcp, chain); *************** *** 578,585 **** */ s = splnet(); for (fcp = ip_fw_chain.lh_first; fcp; fcp = fcp->chain.le_next) ! if (!frwl || frwl->fw_number == fcp->rule->fw_number) ! { fcp->rule->fw_bcnt = fcp->rule->fw_pcnt = 0; fcp->rule->timestamp = 0; } --- 578,584 ---- */ s = splnet(); for (fcp = ip_fw_chain.lh_first; fcp; fcp = fcp->chain.le_next) ! if (!frwl || frwl->fw_number == fcp->rule->fw_number) { fcp->rule->fw_bcnt = fcp->rule->fw_pcnt = 0; fcp->rule->timestamp = 0; } *************** *** 650,655 **** --- 649,659 ---- return (0); } m = *mm; + /* only allow get calls if secure mode < 3 */ + if (securelevel > 2) { + if (m) (void)m_free(m); + return(EPERM); + } if (stage == IP_FW_FLUSH) { while (ip_fw_chain.lh_first != NULL && ip_fw_chain.lh_first->rule->fw_number != (u_short)-1) { *************** *** 672,678 **** printf("ip_fw_ctl: NULL mbuf ptr\n"); return (EINVAL); } - if (stage == IP_FW_ADD || stage == IP_FW_DEL) { struct ip_fw *frwl = check_ipfw_struct(m); --- 676,681 ---- >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199605280150.UAA00816>