Received: by 2002:ac0:b08d:0:0:0:0:0 with SMTP id l13csp4913167imc; Mon, 25 Feb 2019 13:30:37 -0800 (PST) X-Google-Smtp-Source: AHgI3IZ2/ABogcHCa01u8KIPy1f8DraV/Z5si3K4OJ/kOX/DJhr3rRGNADnnbIRtKZoJQKSVXS1a X-Received: by 2002:a17:902:6f08:: with SMTP id w8mr22549635plk.5.1551130236973; Mon, 25 Feb 2019 13:30:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551130236; cv=none; d=google.com; s=arc-20160816; b=Rxjh0fwHlO3JKH1hH90qu/AVfTpvGhNbpz1lgrhswTur3VUSC+DyuoZU7BMzZ56QWl 9rqCY2NazgLD78YVbUm4T73SjBRLZ+S79KyFIbF8FbaEuF0Li0x8+NVlDNuXxcAicipi +XrtlYkL3CAqcwqkldb5Zq14015LYtmpPCmRuu4JuhACu16kUZBQ/FS/U4alDId6gwk5 +eLUqCat0KtfZKLdsAJJYgblCmRQJMOdE+EN1swlMkrEuEpqxFaSYRcMdF2OISHzGB5q iPzFIyo7zPhKxuVykSwzZrSSsok33XEZvUHuUJTi2boUM7MbZyxPbngO60EvlLkDdZib 7+ZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=zlcnWwiGOzJoMICYbn2IBrarUK/FEBb7bZ2Zh8+Hetk=; b=RTdS59vUMVD5wbZwMFmBR7Ure7xpnWZ+5rn3bfuIt4nTlZCFLK2Ss/xwlQaAxudJhu RS4wfvvesiAVBw8qfdqjGwhV3R41W+5IVi+OT8X2e2zG7l1nvMs+ZpF4QIsUw1IsGE0e 83Fw1BPv9FmqwnClzihnwI0IlSJyGQ6crHDSjiD5vq6SgxE6IGXI080Qb+ev4YiWcGB9 LUYUKdPSgbNWQXHBV1+ygt4VVQVb6BapzniOjENKFp/22rThfR7/vFXiIbOe9YYhO2wi z9PHNELHCxYRqgXJCa7zstiog0op1+RLse5D1zbpb1qXKuju7slIQUsAGDck8GonqoG2 oIBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=v+exfZuB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r12si9680233pgv.293.2019.02.25.13.30.21; Mon, 25 Feb 2019 13:30:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=v+exfZuB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732087AbfBYVaF (ORCPT + 99 others); Mon, 25 Feb 2019 16:30:05 -0500 Received: from mail.kernel.org ([198.145.29.99]:35734 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732080AbfBYVaC (ORCPT ); Mon, 25 Feb 2019 16:30:02 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 298DD217F5; Mon, 25 Feb 2019 21:30:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551130201; bh=dE/iQ0mkfd1tdtaUG4B9ZSWxMPbsFeJfS0Josjyfwc8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=v+exfZuB1P1tKbJ0unkY8OYbeBY/ZofMY3N2OqjXgSPp/EpV5Qa0hSyEkZalrd07F U9Z4G8nCk7b5epf2TdbR7/qyP3rxqXwZzkmLSQiM2dVHFlCrXtSR2dUOCM0JiSo5gH Xz61R0zkaIYas8q8lbvrWEP4lirL8MmWK70HWjd8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andrey Ignatov , Alexei Starovoitov , Sasha Levin Subject: [PATCH 4.20 046/183] selftests/bpf: Test [::] -> [::1] rewrite in sys_sendmsg in test_sock_addr Date: Mon, 25 Feb 2019 22:10:19 +0100 Message-Id: <20190225195102.357898615@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190225195054.748060397@linuxfoundation.org> References: <20190225195054.748060397@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.20-stable review patch. If anyone has any objections, please let me know. ------------------ [ 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 Signed-off-by: Alexei Starovoitov Signed-off-by: Sasha Levin --- 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 aeeb76a54d633..e38f1cb7089d3 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