Skip to contentSkip to conversation

IPv6: Fix the return value of ipv6_getsockopt

PATCH In review Wei Yongjun 2 participants 2 messages Dec 13, 2007 – Dec 16, 2007

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 IPv6: Fix the return value of ipv6_getsockopt

If CONFIG_NETFILTER if not selected when compile the kernel source code, ipv6_getsockopt will returen an EINVAL error if optname is not supported by the kernel. But if CONFIG_NETFILTER is selected, ENOPROTOOPT error will be return.
This patch fix to always return ENOPROTOOPT error if optname argument of ipv6_getsockopt is not supported by the kernel.

net/ipv6/ipv6_sockglue.c +0 -0
@@ -1046,7 +1046,7 @@ static int do_ipv6_getsockopt(struct soc
		break;

	default:
-		return -EINVAL;
+		return -ENOPROTOOPT;
	}
	len = min_t(unsigned int, sizeof(int), len);
	if(put_user(len, optlen))

@@ -1069,9 +1069,8 @@ int ipv6_getsockopt(struct sock *sk, int

	err = do_ipv6_getsockopt(sk, level, optname, optval, optlen);

#ifdef CONFIG_NETFILTER
- /* we need to exclude all possible EINVALs except default case */
- if (err == -EINVAL && optname != IPV6_ADDRFORM &&
- optname != MCAST_MSFILTER) {
+ /* we need to exclude all possible ENOPROTOOPTs except default case */

+	if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) {
		int len;

		if (get_user(len, optlen))

@@ -1108,9 +1107,8 @@ int compat_ipv6_getsockopt(struct sock *

	err = do_ipv6_getsockopt(sk, level, optname, optval, optlen);

#ifdef CONFIG_NETFILTER
- /* we need to exclude all possible EINVALs except default case */
- if (err == -EINVAL && optname != IPV6_ADDRFORM &&
- optname != MCAST_MSFILTER) {
+ /* we need to exclude all possible ENOPROTOOPTs except default case */

+	if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) {
		int len;

		if (get_user(len, optlen))
maintainer
#1 lore raw

From: Wei Yongjun <[email protected]>
Date: Thu, 13 Dec 2007 14:44:00 +0900

Quoted 8 lines

If CONFIG_NETFILTER if not selected when compile the kernel source code, ipv6_getsockopt will returen an EINVAL error if optname is not supported by the kernel. But if CONFIG_NETFILTER is selected, ENOPROTOOPT error will be return.
This patch fix to always return ENOPROTOOPT error if optname argument of ipv6_getsockopt is not supported by the kernel.

Patch applied to net-2.6, thanks for this bug fix.