From b7c5dedce662f541415fd7e6ff840b6524c6cd7d Mon Sep 17 00:00:00 2001 From: Keith Bostic Date: Tue, 4 Jan 1994 01:39:01 -0800 Subject: [PATCH] In ip_ctloutput, if the option is at level IPPROTO_IP but not recognized/supported, return ENOPROTOOPT (from POSIX 1003.12). I continued to return EINVAL if the level was not IPPROTO_IP. Also, in the latter case, I added a check to free any mbuf only for setsockopt, not getsockopt, although that is not strictly necessary (getsockopt passes a pointer to a null pointer). From: Mike Karels SCCS-vsn: sys/netinet/ip_output.c 8.2 --- usr/src/sys/netinet/ip_output.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/usr/src/sys/netinet/ip_output.c b/usr/src/sys/netinet/ip_output.c index a401446dab..9b2a919d04 100644 --- a/usr/src/sys/netinet/ip_output.c +++ b/usr/src/sys/netinet/ip_output.c @@ -4,7 +4,7 @@ * * %sccs.include.redist.c% * - * @(#)ip_output.c 8.1 (Berkeley) %G% + * @(#)ip_output.c 8.2 (Berkeley) %G% */ #include @@ -460,9 +460,11 @@ ip_ctloutput(op, so, level, optname, mp) register int optval; int error = 0; - if (level != IPPROTO_IP) - goto freeit; - else switch (op) { + if (level != IPPROTO_IP) { + error = EINVAL; + if (op == PRCO_SETOPT && *mp) + (void) m_free(*mp); + } else switch (op) { case PRCO_SETOPT: switch (optname) { @@ -522,9 +524,8 @@ ip_ctloutput(op, so, level, optname, mp) error = ip_setmoptions(optname, &inp->inp_moptions, m); break; - freeit: default: - error = EINVAL; + error = ENOPROTOOPT; break; } if (m) @@ -587,7 +588,7 @@ ip_ctloutput(op, so, level, optname, mp) break; default: - error = EINVAL; + error = ENOPROTOOPT; break; } break; -- 2.20.1