Skip to content

Commit bc467e9

Browse files
jrifeAlexei Starovoitov
authored andcommitted
selftests/bpf: Expand getsockname and getpeername tests
This expands coverage for getsockname and getpeername hooks to include getsockname4, getsockname6, getpeername4, and getpeername6. Signed-off-by: Jordan Rife <jrife@google.com> Link: https://lore.kernel.org/r/20240510190246.3247730-17-jrife@google.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent dfb7539 commit bc467e9

5 files changed

Lines changed: 412 additions & 2 deletions

File tree

tools/testing/selftests/bpf/prog_tests/sock_addr.c

Lines changed: 302 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
#include "recvmsg6_prog.skel.h"
1616
#include "sendmsg_unix_prog.skel.h"
1717
#include "recvmsg_unix_prog.skel.h"
18+
#include "getsockname4_prog.skel.h"
19+
#include "getsockname6_prog.skel.h"
1820
#include "getsockname_unix_prog.skel.h"
21+
#include "getpeername4_prog.skel.h"
22+
#include "getpeername6_prog.skel.h"
1923
#include "getpeername_unix_prog.skel.h"
2024
#include "network_helpers.h"
2125

@@ -466,7 +470,11 @@ BPF_SKEL_FUNCS(recvmsg4_prog, recvmsg4_prog);
466470
BPF_SKEL_FUNCS(recvmsg6_prog, recvmsg6_prog);
467471
BPF_SKEL_FUNCS(recvmsg_unix_prog, recvmsg_unix_prog);
468472
BPF_SKEL_FUNCS(getsockname_unix_prog, getsockname_unix_prog);
473+
BPF_SKEL_FUNCS(getsockname4_prog, getsockname_v4_prog);
474+
BPF_SKEL_FUNCS(getsockname6_prog, getsockname_v6_prog);
469475
BPF_SKEL_FUNCS(getpeername_unix_prog, getpeername_unix_prog);
476+
BPF_SKEL_FUNCS(getpeername4_prog, getpeername_v4_prog);
477+
BPF_SKEL_FUNCS(getpeername6_prog, getpeername_v6_prog);
470478

471479
static struct sock_addr_test tests[] = {
472480
/* bind - system calls */
@@ -1688,7 +1696,71 @@ static struct sock_addr_test tests[] = {
16881696
/* getsockname - system calls */
16891697
{
16901698
SOCK_ADDR_TEST_GETSOCKNAME,
1691-
"getsockname_unix",
1699+
"getsockname4: getsockname (stream)",
1700+
getsockname_v4_prog_load,
1701+
getsockname_v4_prog_destroy,
1702+
BPF_CGROUP_INET4_GETSOCKNAME,
1703+
&user_ops,
1704+
AF_INET,
1705+
SOCK_STREAM,
1706+
SERV4_REWRITE_IP,
1707+
SERV4_REWRITE_PORT,
1708+
SERV4_IP,
1709+
SERV4_PORT,
1710+
NULL,
1711+
SUCCESS,
1712+
},
1713+
{
1714+
SOCK_ADDR_TEST_GETSOCKNAME,
1715+
"getsockname4: getsockname (dgram)",
1716+
getsockname_v4_prog_load,
1717+
getsockname_v4_prog_destroy,
1718+
BPF_CGROUP_INET4_GETSOCKNAME,
1719+
&user_ops,
1720+
AF_INET,
1721+
SOCK_DGRAM,
1722+
SERV4_REWRITE_IP,
1723+
SERV4_REWRITE_PORT,
1724+
SERV4_IP,
1725+
SERV4_PORT,
1726+
NULL,
1727+
SUCCESS,
1728+
},
1729+
{
1730+
SOCK_ADDR_TEST_GETSOCKNAME,
1731+
"getsockname6: getsockname (stream)",
1732+
getsockname_v6_prog_load,
1733+
getsockname_v6_prog_destroy,
1734+
BPF_CGROUP_INET6_GETSOCKNAME,
1735+
&user_ops,
1736+
AF_INET6,
1737+
SOCK_STREAM,
1738+
SERV6_REWRITE_IP,
1739+
SERV6_REWRITE_PORT,
1740+
SERV6_IP,
1741+
SERV6_PORT,
1742+
NULL,
1743+
SUCCESS,
1744+
},
1745+
{
1746+
SOCK_ADDR_TEST_GETSOCKNAME,
1747+
"getsockname6: getsockname (dgram)",
1748+
getsockname_v6_prog_load,
1749+
getsockname_v6_prog_destroy,
1750+
BPF_CGROUP_INET6_GETSOCKNAME,
1751+
&user_ops,
1752+
AF_INET6,
1753+
SOCK_DGRAM,
1754+
SERV6_REWRITE_IP,
1755+
SERV6_REWRITE_PORT,
1756+
SERV6_IP,
1757+
SERV6_PORT,
1758+
NULL,
1759+
SUCCESS,
1760+
},
1761+
{
1762+
SOCK_ADDR_TEST_GETSOCKNAME,
1763+
"getsockname_unix: getsockname",
16921764
getsockname_unix_prog_load,
16931765
getsockname_unix_prog_destroy,
16941766
BPF_CGROUP_UNIX_GETSOCKNAME,
@@ -1703,10 +1775,156 @@ static struct sock_addr_test tests[] = {
17031775
SUCCESS,
17041776
},
17051777

1778+
/* getsockname - kernel calls */
1779+
{
1780+
SOCK_ADDR_TEST_GETSOCKNAME,
1781+
"getsockname4: kernel_getsockname (stream)",
1782+
getsockname_v4_prog_load,
1783+
getsockname_v4_prog_destroy,
1784+
BPF_CGROUP_INET4_GETSOCKNAME,
1785+
&kern_ops_kernel_sendmsg,
1786+
AF_INET,
1787+
SOCK_STREAM,
1788+
SERV4_REWRITE_IP,
1789+
SERV4_REWRITE_PORT,
1790+
SERV4_IP,
1791+
SERV4_PORT,
1792+
NULL,
1793+
SUCCESS,
1794+
},
1795+
{
1796+
SOCK_ADDR_TEST_GETSOCKNAME,
1797+
"getsockname4: kernel_getsockname (dgram)",
1798+
getsockname_v4_prog_load,
1799+
getsockname_v4_prog_destroy,
1800+
BPF_CGROUP_INET4_GETSOCKNAME,
1801+
&kern_ops_kernel_sendmsg,
1802+
AF_INET,
1803+
SOCK_DGRAM,
1804+
SERV4_REWRITE_IP,
1805+
SERV4_REWRITE_PORT,
1806+
SERV4_IP,
1807+
SERV4_PORT,
1808+
NULL,
1809+
SUCCESS,
1810+
},
1811+
{
1812+
SOCK_ADDR_TEST_GETSOCKNAME,
1813+
"getsockname6: kernel_getsockname (stream)",
1814+
getsockname_v6_prog_load,
1815+
getsockname_v6_prog_destroy,
1816+
BPF_CGROUP_INET6_GETSOCKNAME,
1817+
&kern_ops_kernel_sendmsg,
1818+
AF_INET6,
1819+
SOCK_STREAM,
1820+
SERV6_REWRITE_IP,
1821+
SERV6_REWRITE_PORT,
1822+
SERV6_IP,
1823+
SERV6_PORT,
1824+
NULL,
1825+
SUCCESS,
1826+
},
1827+
{
1828+
SOCK_ADDR_TEST_GETSOCKNAME,
1829+
"getsockname6: kernel_getsockname (dgram)",
1830+
getsockname_v6_prog_load,
1831+
getsockname_v6_prog_destroy,
1832+
BPF_CGROUP_INET6_GETSOCKNAME,
1833+
&kern_ops_kernel_sendmsg,
1834+
AF_INET6,
1835+
SOCK_DGRAM,
1836+
SERV6_REWRITE_IP,
1837+
SERV6_REWRITE_PORT,
1838+
SERV6_IP,
1839+
SERV6_PORT,
1840+
NULL,
1841+
SUCCESS,
1842+
},
1843+
{
1844+
SOCK_ADDR_TEST_GETSOCKNAME,
1845+
"getsockname_unix: kernel_getsockname",
1846+
getsockname_unix_prog_load,
1847+
getsockname_unix_prog_destroy,
1848+
BPF_CGROUP_UNIX_GETSOCKNAME,
1849+
&kern_ops_kernel_sendmsg,
1850+
AF_UNIX,
1851+
SOCK_STREAM,
1852+
SERVUN_ADDRESS,
1853+
0,
1854+
SERVUN_REWRITE_ADDRESS,
1855+
0,
1856+
NULL,
1857+
SUCCESS,
1858+
},
1859+
17061860
/* getpeername - system calls */
17071861
{
17081862
SOCK_ADDR_TEST_GETPEERNAME,
1709-
"getpeername_unix",
1863+
"getpeername4: getpeername (stream)",
1864+
getpeername_v4_prog_load,
1865+
getpeername_v4_prog_destroy,
1866+
BPF_CGROUP_INET4_GETPEERNAME,
1867+
&user_ops,
1868+
AF_INET,
1869+
SOCK_STREAM,
1870+
SERV4_REWRITE_IP,
1871+
SERV4_REWRITE_PORT,
1872+
SERV4_IP,
1873+
SERV4_PORT,
1874+
NULL,
1875+
SUCCESS,
1876+
},
1877+
{
1878+
SOCK_ADDR_TEST_GETPEERNAME,
1879+
"getpeername4: getpeername (dgram)",
1880+
getpeername_v4_prog_load,
1881+
getpeername_v4_prog_destroy,
1882+
BPF_CGROUP_INET4_GETPEERNAME,
1883+
&user_ops,
1884+
AF_INET,
1885+
SOCK_DGRAM,
1886+
SERV4_REWRITE_IP,
1887+
SERV4_REWRITE_PORT,
1888+
SERV4_IP,
1889+
SERV4_PORT,
1890+
NULL,
1891+
SUCCESS,
1892+
},
1893+
{
1894+
SOCK_ADDR_TEST_GETPEERNAME,
1895+
"getpeername6: getpeername (stream)",
1896+
getpeername_v6_prog_load,
1897+
getpeername_v6_prog_destroy,
1898+
BPF_CGROUP_INET6_GETPEERNAME,
1899+
&user_ops,
1900+
AF_INET6,
1901+
SOCK_STREAM,
1902+
SERV6_REWRITE_IP,
1903+
SERV6_REWRITE_PORT,
1904+
SERV6_IP,
1905+
SERV6_PORT,
1906+
NULL,
1907+
SUCCESS,
1908+
},
1909+
{
1910+
SOCK_ADDR_TEST_GETPEERNAME,
1911+
"getpeername6: getpeername (dgram)",
1912+
getpeername_v6_prog_load,
1913+
getpeername_v6_prog_destroy,
1914+
BPF_CGROUP_INET6_GETPEERNAME,
1915+
&user_ops,
1916+
AF_INET6,
1917+
SOCK_DGRAM,
1918+
SERV6_REWRITE_IP,
1919+
SERV6_REWRITE_PORT,
1920+
SERV6_IP,
1921+
SERV6_PORT,
1922+
NULL,
1923+
SUCCESS,
1924+
},
1925+
{
1926+
SOCK_ADDR_TEST_GETPEERNAME,
1927+
"getpeername_unix: getpeername",
17101928
getpeername_unix_prog_load,
17111929
getpeername_unix_prog_destroy,
17121930
BPF_CGROUP_UNIX_GETPEERNAME,
@@ -1720,6 +1938,88 @@ static struct sock_addr_test tests[] = {
17201938
NULL,
17211939
SUCCESS,
17221940
},
1941+
1942+
/* getpeername - kernel calls */
1943+
{
1944+
SOCK_ADDR_TEST_GETPEERNAME,
1945+
"getpeername4: kernel_getpeername (stream)",
1946+
getpeername_v4_prog_load,
1947+
getpeername_v4_prog_destroy,
1948+
BPF_CGROUP_INET4_GETPEERNAME,
1949+
&kern_ops_kernel_sendmsg,
1950+
AF_INET,
1951+
SOCK_STREAM,
1952+
SERV4_REWRITE_IP,
1953+
SERV4_REWRITE_PORT,
1954+
SERV4_IP,
1955+
SERV4_PORT,
1956+
NULL,
1957+
SUCCESS,
1958+
},
1959+
{
1960+
SOCK_ADDR_TEST_GETPEERNAME,
1961+
"getpeername4: kernel_getpeername (dgram)",
1962+
getpeername_v4_prog_load,
1963+
getpeername_v4_prog_destroy,
1964+
BPF_CGROUP_INET4_GETPEERNAME,
1965+
&kern_ops_kernel_sendmsg,
1966+
AF_INET,
1967+
SOCK_DGRAM,
1968+
SERV4_REWRITE_IP,
1969+
SERV4_REWRITE_PORT,
1970+
SERV4_IP,
1971+
SERV4_PORT,
1972+
NULL,
1973+
SUCCESS,
1974+
},
1975+
{
1976+
SOCK_ADDR_TEST_GETPEERNAME,
1977+
"getpeername6: kernel_getpeername (stream)",
1978+
getpeername_v6_prog_load,
1979+
getpeername_v6_prog_destroy,
1980+
BPF_CGROUP_INET6_GETPEERNAME,
1981+
&kern_ops_kernel_sendmsg,
1982+
AF_INET6,
1983+
SOCK_STREAM,
1984+
SERV6_REWRITE_IP,
1985+
SERV6_REWRITE_PORT,
1986+
SERV6_IP,
1987+
SERV6_PORT,
1988+
NULL,
1989+
SUCCESS,
1990+
},
1991+
{
1992+
SOCK_ADDR_TEST_GETPEERNAME,
1993+
"getpeername6: kernel_getpeername (dgram)",
1994+
getpeername_v6_prog_load,
1995+
getpeername_v6_prog_destroy,
1996+
BPF_CGROUP_INET6_GETPEERNAME,
1997+
&kern_ops_kernel_sendmsg,
1998+
AF_INET6,
1999+
SOCK_DGRAM,
2000+
SERV6_REWRITE_IP,
2001+
SERV6_REWRITE_PORT,
2002+
SERV6_IP,
2003+
SERV6_PORT,
2004+
NULL,
2005+
SUCCESS,
2006+
},
2007+
{
2008+
SOCK_ADDR_TEST_GETPEERNAME,
2009+
"getpeername_unix: kernel_getpeername",
2010+
getpeername_unix_prog_load,
2011+
getpeername_unix_prog_destroy,
2012+
BPF_CGROUP_UNIX_GETPEERNAME,
2013+
&kern_ops_kernel_sendmsg,
2014+
AF_UNIX,
2015+
SOCK_STREAM,
2016+
SERVUN_ADDRESS,
2017+
0,
2018+
SERVUN_REWRITE_ADDRESS,
2019+
0,
2020+
NULL,
2021+
SUCCESS,
2022+
},
17232023
};
17242024

17252025
typedef int (*info_fn)(int, struct sockaddr *, socklen_t *);
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
/* Copyright (c) 2024 Google LLC */
3+
4+
#include "vmlinux.h"
5+
6+
#include <string.h>
7+
#include <bpf/bpf_helpers.h>
8+
#include <bpf/bpf_endian.h>
9+
#include <bpf/bpf_core_read.h>
10+
#include "bpf_kfuncs.h"
11+
12+
#define REWRITE_ADDRESS_IP4 0xc0a801fe // 192.168.1.254
13+
#define REWRITE_ADDRESS_PORT4 4040
14+
15+
SEC("cgroup/getpeername4")
16+
int getpeername_v4_prog(struct bpf_sock_addr *ctx)
17+
{
18+
ctx->user_ip4 = bpf_htonl(REWRITE_ADDRESS_IP4);
19+
ctx->user_port = bpf_htons(REWRITE_ADDRESS_PORT4);
20+
21+
return 1;
22+
}
23+
24+
char _license[] SEC("license") = "GPL";

0 commit comments

Comments
 (0)