diff options
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests')
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/sockopt_sk.c | 28 | 
1 files changed, 28 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/sockopt_sk.c b/tools/testing/selftests/bpf/prog_tests/sockopt_sk.c index 60d952719d27..4512dd808c33 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockopt_sk.c +++ b/tools/testing/selftests/bpf/prog_tests/sockopt_sk.c @@ -3,6 +3,7 @@  #include "cgroup_helpers.h"  #include <linux/tcp.h> +#include <linux/netlink.h>  #include "sockopt_sk.skel.h"  #ifndef SOL_TCP @@ -183,6 +184,33 @@ static int getsetsockopt(void)  		goto err;  	} +	/* optval=NULL case is handled correctly */ + +	close(fd); +	fd = socket(AF_NETLINK, SOCK_RAW, 0); +	if (fd < 0) { +		log_err("Failed to create AF_NETLINK socket"); +		return -1; +	} + +	buf.u32 = 1; +	optlen = sizeof(__u32); +	err = setsockopt(fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &buf, optlen); +	if (err) { +		log_err("Unexpected getsockopt(NETLINK_ADD_MEMBERSHIP) err=%d errno=%d", +			err, errno); +		goto err; +	} + +	optlen = 0; +	err = getsockopt(fd, SOL_NETLINK, NETLINK_LIST_MEMBERSHIPS, NULL, &optlen); +	if (err) { +		log_err("Unexpected getsockopt(NETLINK_LIST_MEMBERSHIPS) err=%d errno=%d", +			err, errno); +		goto err; +	} +	ASSERT_EQ(optlen, 4, "Unexpected NETLINK_LIST_MEMBERSHIPS value"); +  	free(big_buf);  	close(fd);  	return 0;  | 
