public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Andrey Ignatov <rdna@fb.com>, Alexei Starovoitov <ast@kernel.org>,
	Sasha Levin <sashal@kernel.org>,
	netdev@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: [PATCH AUTOSEL 4.19 25/83] selftests/bpf: Test [::] -> [::1] rewrite in sys_sendmsg in test_sock_addr
Date: Tue, 12 Feb 2019 21:36:03 -0500	[thread overview]
Message-ID: <20190213023701.20286-25-sashal@kernel.org> (raw)
In-Reply-To: <20190213023701.20286-1-sashal@kernel.org>

From: Andrey Ignatov <rdna@fb.com>

[ Upstream commit 976b4f3a4646fbf0d189caca25f91f82e4be4b5a ]

Test that sys_sendmsg BPF hook doesn't break sys_sendmsg behaviour to
rewrite destination IPv6 = [::] with [::1] (BSD'ism).

Two test cases are added:

1) User passes dst IPv6 = [::] and BPF_CGROUP_UDP6_SENDMSG program
   doesn't touch it.

2) User passes dst IPv6 != [::], but BPF_CGROUP_UDP6_SENDMSG program
   rewrites it with [::].

In both cases [::1] is used by sys_sendmsg code eventually and datagram
is sent successfully for unconnected UDP socket.

Example of relevant output:
  Test case: sendmsg6: set dst IP = [::] (BSD'ism) .. [PASS]
  Test case: sendmsg6: preserve dst IP = [::] (BSD'ism) .. [PASS]

Signed-off-by: Andrey Ignatov <rdna@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 tools/testing/selftests/bpf/test_sock_addr.c | 53 ++++++++++++++++++--
 1 file changed, 50 insertions(+), 3 deletions(-)

diff --git a/tools/testing/selftests/bpf/test_sock_addr.c b/tools/testing/selftests/bpf/test_sock_addr.c
index aeeb76a54d63..e38f1cb7089d 100644
--- a/tools/testing/selftests/bpf/test_sock_addr.c
+++ b/tools/testing/selftests/bpf/test_sock_addr.c
@@ -44,6 +44,7 @@
 #define SERV6_V4MAPPED_IP	"::ffff:192.168.0.4"
 #define SRC6_IP			"::1"
 #define SRC6_REWRITE_IP		"::6"
+#define WILDCARD6_IP		"::"
 #define SERV6_PORT		6060
 #define SERV6_REWRITE_PORT	6666
 
@@ -85,12 +86,14 @@ static int bind4_prog_load(const struct sock_addr_test *test);
 static int bind6_prog_load(const struct sock_addr_test *test);
 static int connect4_prog_load(const struct sock_addr_test *test);
 static int connect6_prog_load(const struct sock_addr_test *test);
+static int sendmsg_allow_prog_load(const struct sock_addr_test *test);
 static int sendmsg_deny_prog_load(const struct sock_addr_test *test);
 static int sendmsg4_rw_asm_prog_load(const struct sock_addr_test *test);
 static int sendmsg4_rw_c_prog_load(const struct sock_addr_test *test);
 static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test);
 static int sendmsg6_rw_c_prog_load(const struct sock_addr_test *test);
 static int sendmsg6_rw_v4mapped_prog_load(const struct sock_addr_test *test);
+static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test);
 
 static struct sock_addr_test tests[] = {
 	/* bind */
@@ -462,6 +465,34 @@ static struct sock_addr_test tests[] = {
 		SRC6_REWRITE_IP,
 		SYSCALL_ENOTSUPP,
 	},
+	{
+		"sendmsg6: set dst IP = [::] (BSD'ism)",
+		sendmsg6_rw_wildcard_prog_load,
+		BPF_CGROUP_UDP6_SENDMSG,
+		BPF_CGROUP_UDP6_SENDMSG,
+		AF_INET6,
+		SOCK_DGRAM,
+		SERV6_IP,
+		SERV6_PORT,
+		SERV6_REWRITE_IP,
+		SERV6_REWRITE_PORT,
+		SRC6_REWRITE_IP,
+		SUCCESS,
+	},
+	{
+		"sendmsg6: preserve dst IP = [::] (BSD'ism)",
+		sendmsg_allow_prog_load,
+		BPF_CGROUP_UDP6_SENDMSG,
+		BPF_CGROUP_UDP6_SENDMSG,
+		AF_INET6,
+		SOCK_DGRAM,
+		WILDCARD6_IP,
+		SERV6_PORT,
+		SERV6_REWRITE_IP,
+		SERV6_PORT,
+		SRC6_IP,
+		SUCCESS,
+	},
 	{
 		"sendmsg6: deny call",
 		sendmsg_deny_prog_load,
@@ -714,16 +745,27 @@ static int connect6_prog_load(const struct sock_addr_test *test)
 	return load_path(test, CONNECT6_PROG_PATH);
 }
 
-static int sendmsg_deny_prog_load(const struct sock_addr_test *test)
+static int sendmsg_ret_only_prog_load(const struct sock_addr_test *test,
+				      int32_t rc)
 {
 	struct bpf_insn insns[] = {
-		/* return 0 */
-		BPF_MOV64_IMM(BPF_REG_0, 0),
+		/* return rc */
+		BPF_MOV64_IMM(BPF_REG_0, rc),
 		BPF_EXIT_INSN(),
 	};
 	return load_insns(test, insns, sizeof(insns) / sizeof(struct bpf_insn));
 }
 
+static int sendmsg_allow_prog_load(const struct sock_addr_test *test)
+{
+	return sendmsg_ret_only_prog_load(test, /*rc*/ 1);
+}
+
+static int sendmsg_deny_prog_load(const struct sock_addr_test *test)
+{
+	return sendmsg_ret_only_prog_load(test, /*rc*/ 0);
+}
+
 static int sendmsg4_rw_asm_prog_load(const struct sock_addr_test *test)
 {
 	struct sockaddr_in dst4_rw_addr;
@@ -844,6 +886,11 @@ static int sendmsg6_rw_v4mapped_prog_load(const struct sock_addr_test *test)
 	return sendmsg6_rw_dst_asm_prog_load(test, SERV6_V4MAPPED_IP);
 }
 
+static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test)
+{
+	return sendmsg6_rw_dst_asm_prog_load(test, WILDCARD6_IP);
+}
+
 static int sendmsg6_rw_c_prog_load(const struct sock_addr_test *test)
 {
 	return load_path(test, SENDMSG6_PROG_PATH);
-- 
2.19.1


  parent reply	other threads:[~2019-02-13  2:55 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-13  2:35 [PATCH AUTOSEL 4.19 01/83] backlight: pwm_bl: Fix devicetree parsing with auto-generated brightness tables Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 02/83] mfd: ti_am335x_tscadc: Use PLATFORM_DEVID_AUTO while registering mfd cells Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 03/83] pvcalls-front: read all data before closing the connection Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 04/83] pvcalls-front: don't try to free unallocated rings Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 05/83] pvcalls-front: properly allocate sk Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 06/83] pvcalls-back: set -ENOTCONN in pvcalls_conn_back_read Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 07/83] mfd: twl-core: Fix section annotations on {,un}protect_pm_master Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 08/83] mfd: db8500-prcmu: Fix some section annotations Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 09/83] mfd: mt6397: Do not call irq_domain_remove if PMIC unsupported Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 10/83] mfd: ab8500-core: Return zero in get_register_interruptible() Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 11/83] mfd: bd9571mwv: Add volatile register to make DVFS work Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 12/83] mfd: qcom_rpm: write fw_version to CTRL_REG Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 13/83] mfd: wm5110: Add missing ASRC rate register Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 14/83] mfd: axp20x: Add AC power supply cell for AXP813 Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 15/83] mfd: axp20x: Re-align MFD cell entries Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 16/83] mfd: axp20x: Add supported cells for AXP803 Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 17/83] mfd: cros_ec_dev: Add missing mfd_remove_devices() call in remove Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 18/83] mfd: tps65218: Use devm_regmap_add_irq_chip and clean up error path in probe() Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 19/83] mfd: mc13xxx: Fix a missing check of a register-read failure Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 20/83] xen/pvcalls: remove set but not used variable 'intf' Sasha Levin
2019-02-13  2:35 ` [PATCH AUTOSEL 4.19 21/83] qed: Fix qed_chain_set_prod() for PBL chains with non power of 2 page count Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 22/83] qed: Fix qed_ll2_post_rx_buffer_notify_fw() by adding a write memory barrier Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 23/83] net: hns: Fix use after free identified by SLUB debug Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 24/83] bpf: Fix [::] -> [::1] rewrite in sys_sendmsg Sasha Levin
2019-02-13  2:36 ` Sasha Levin [this message]
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 26/83] watchdog: mt7621_wdt/rt2880_wdt: Fix compilation problem Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 27/83] net/mlx4: Get rid of page operation after dma_alloc_coherent Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 28/83] MIPS: ath79: Enable OF serial ports in the default config Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 29/83] xprtrdma: Double free in rpcrdma_sendctxs_create() Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 30/83] mlxsw: spectrum_acl: Add cleanup after C-TCAM update error condition Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 31/83] selftests: forwarding: Add a test for VLAN deletion Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 32/83] netfilter: nf_tables: fix leaking object reference count Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 33/83] scsi: qla4xxx: check return code of qla4xxx_copy_from_fwddb_param Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 34/83] scsi: isci: initialize shost fully before calling scsi_add_host() Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 35/83] include/linux/compiler*.h: fix OPTIMIZER_HIDE_VAR Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 36/83] MIPS: jazz: fix 64bit build Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 37/83] netfilter: nft_flow_offload: Fix reverse route lookup Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 38/83] bpf: correctly set initial window on active Fast Open sender Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 39/83] pvcalls-front: Avoid get_free_pages(GFP_KERNEL) under spinlock Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 40/83] bpf: fix panic in stack_map_get_build_id() on i386 and arm32 Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 41/83] netfilter: nft_flow_offload: fix interaction with vrf slave device Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 42/83] RDMA/mthca: Clear QP objects during their allocation Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 43/83] powerpc/8xx: fix setting of pagetable for Abatron BDI debug tool Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 44/83] acpi/nfit: Fix race accessing memdev in nfit_get_smbios_id() Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 45/83] net: stmmac: Fix PCI module removal leak Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 46/83] net: stmmac: dwxgmac2: Only clear interrupts that are active Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 47/83] net: stmmac: Check if CBS is supported before configuring Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 48/83] net: stmmac: Fix the logic of checking if RX Watchdog must be enabled Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 49/83] net: stmmac: Prevent RX starvation in stmmac_napi_poll() Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 50/83] isdn: i4l: isdn_tty: Fix some concurrency double-free bugs Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 51/83] scsi: tcmu: avoid cmd/qfull timers updated whenever a new cmd comes Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 52/83] scsi: ufs: Fix system suspend status Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 53/83] scsi: qedi: Add ep_state for login completion on un-reachable targets Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 54/83] scsi: ufs: Fix geometry descriptor size Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 55/83] scsi: cxgb4i: add wait_for_completion() Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 56/83] netfilter: nft_flow_offload: fix checking method of conntrack helper Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 57/83] always clear the X2APIC_ENABLE bit for PV guest Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 58/83] drm/meson: add missing of_node_put Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 59/83] drm/amdkfd: Don't assign dGPUs to APU topology devices Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 60/83] drm/amd/display: fix PME notification not working in RV desktop Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 61/83] vhost: return EINVAL if iovecs size does not match the message size Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 62/83] drm/sun4i: backend: add missing of_node_puts Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 63/83] pvcalls-front: fix potential null dereference Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 64/83] selftests: tc-testing: drop test on missing tunnel key id Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 65/83] selftests: tc-testing: fix tunnel_key failure if dst_port is unspecified Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 66/83] selftests: tc-testing: fix parsing of ife type Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 67/83] PCI: Fix __initdata issue with "pci=disable_acs_redir" parameter Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 68/83] afs: Don't set vnode->cb_s_break in afs_validate() Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 69/83] afs: Fix key refcounting in file locking code Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 70/83] bpf: don't assume build-id length is always 20 bytes Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 71/83] bpf: zero out build_id for BPF_STACK_BUILD_ID_IP Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 72/83] selftests/bpf: retry tests that expect build-id Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 73/83] atm: he: fix sign-extension overflow on large shift Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 74/83] hwmon: (tmp421) Correct the misspelling of the tmp442 compatible attribute in OF device ID table Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 75/83] leds: lp5523: fix a missing check of return value of lp55xx_read Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 76/83] bpf: bpf_setsockopt: reset sock dst on SO_MARK changes Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 77/83] dpaa_eth: NETIF_F_LLTX requires to do our own update of trans_start Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 78/83] mlxsw: pci: Return error on PCI reset timeout Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 79/83] net: bridge: Mark FDB entries that were added by user as such Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 80/83] mlxsw: spectrum_switchdev: Do not treat static FDB entries as sticky Sasha Levin
2019-02-13  2:36 ` [PATCH AUTOSEL 4.19 81/83] selftests: forwarding: Add a test case for externally learned FDB entries Sasha Levin
2019-02-13  2:37 ` [PATCH AUTOSEL 4.19 82/83] net/mlx5e: Fix wrong (zero) TX drop counter indication for representor Sasha Levin
2019-02-13  2:37 ` [PATCH AUTOSEL 4.19 83/83] isdn: avm: Fix string plus integer warning from Clang Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190213023701.20286-25-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=ast@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=rdna@fb.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox