From patchwork Tue Nov 21 21:14:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?0L3QsNCx?= X-Patchwork-Id: 13463571 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nabijaczleweli.xyz header.i=@nabijaczleweli.xyz header.b="qtcKcdy9" Received: from tarta.nabijaczleweli.xyz (tarta.nabijaczleweli.xyz [139.28.40.42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D1AB79E for ; Tue, 21 Nov 2023 13:14:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nabijaczleweli.xyz; s=202305; t=1700601288; bh=UY/QglsNzKErcVBfqS09kPdYvYOuojG/aj3LgOPNZ1Q=; h=Date:From:To:Subject:From; b=qtcKcdy998fQ2xvqCm2CBQtNBU07FzP3cVfPjgWtAxuQzzVZZ6FTGJf08cZzFnqBU LCtkdqBLlAKTJcVkPV+Quht0IKNBEIlt1M7g5/WMEbc/ravPqAgKHRlP9Vb+IoYSbh uP1Z6bJz8/o27SIm+c80NkCuFWUD5GlvuXlkq08+lEPU8NAI7IsVD/qcYSNBRCKBY1 QsyU6MwjlwgxNPhBO6tUb0hqB84dgxXsZ6iLti6rra8HM3IF13lf5N8/4KLvcTILdm ZS1T1HrmlGckkJQQNcJeYK69TIducs6AVoQnlZC85HYi+lrE3S3FGzncQ7CCNvGXeU fQDKKScPHEm2w== Received: from tarta.nabijaczleweli.xyz (unknown [192.168.1.250]) by tarta.nabijaczleweli.xyz (Postfix) with ESMTPSA id 6070811FC6; Tue, 21 Nov 2023 22:14:48 +0100 (CET) Date: Tue, 21 Nov 2023 22:14:48 +0100 From: Ahelenia =?utf-8?q?Ziemia=C5=84ska?= To: linux-nfs@vger.kernel.org, NeilBrown , Steve Dickson Subject: [PATCH nfs-utils v2 1/2] fsidd: call anonymous sockets by their name only, don't fill with NULs to 108 bytes Message-ID: Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20231103 Since e00ab3c0616fe6d83ab0710d9e7d989c299088f7, ss -l looks like this: u_seq LISTEN 0 5 @/run/fsid.sock@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 26989379 * 0 with fsidd pushing all the addresses to 108 bytes wide, which is deeply egregious if you don't filter it out and recolumnate. This is because, naturally (unix(7)), "Null bytes in the name have no special significance": abstract addresses are binary blobs, but paths automatically terminate at the first NUL byte, since paths can't contain those. So just specify the correct address length when we're using the abstract domain: unix(7) recommends "offsetof(struct sockaddr_un, sun_path) + strlen(sun_path) + 1" for paths, but we don't want to include the terminating NUL, so it's just "offsetof(struct sockaddr_un, sun_path) + strlen(sun_path)". This brings the width back to order: -- >8 -- $ ss -la | grep @ u_str ESTAB 0 0 @45208536ec96909a/bus/systemd-timesyn/bus-api-timesync 18500238 * 18501249 u_str ESTAB 0 0 @fecc9657d2315eb7/bus/systemd-network/bus-api-network 18495452 * 18494406 u_seq LISTEN 0 5 @/run/fsid.sock 27168796 * 0 u_str ESTAB 0 0 @ac308f35f50797a2/bus/systemd-logind/system 19406 * 15153 u_str ESTAB 0 0 @b6606e0dfacbae75/bus/systemd/bus-api-system 18494353 * 18495334 u_str ESTAB 0 0 @5880653d215718a7/bus/systemd/bus-system 26930876 * 26930003 -- >8 -- Fixes: e00ab3c0616fe6d83ab0710d9e7d989c299088f7 ("fsidd: provide better default socket name.") Signed-off-by: Ahelenia Ziemiańska Reviewed-by: NeilBrown --- v1: <04f3fe71defa757d518468f04f08334a5d0dfbb9.1693754442.git.nabijaczleweli@nabijaczleweli.xyz> v2 NFC, addr_len declared at top of function support/reexport/fsidd.c | 9 ++++++--- support/reexport/reexport.c | 8 ++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/support/reexport/fsidd.c b/support/reexport/fsidd.c index 3e62b3fc..8a70b78f 100644 --- a/support/reexport/fsidd.c +++ b/support/reexport/fsidd.c @@ -147,6 +147,7 @@ int main(void) { struct event *srv_ev; struct sockaddr_un addr; + socklen_t addr_len; char *sock_file; int srv; @@ -161,10 +162,12 @@ int main(void) memset(&addr, 0, sizeof(struct sockaddr_un)); addr.sun_family = AF_UNIX; strncpy(addr.sun_path, sock_file, sizeof(addr.sun_path) - 1); - if (addr.sun_path[0] == '@') + addr_len = sizeof(struct sockaddr_un); + if (addr.sun_path[0] == '@') { /* "abstract" socket namespace */ + addr_len = offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path); addr.sun_path[0] = 0; - else + } else unlink(sock_file); srv = socket(AF_UNIX, SOCK_SEQPACKET | SOCK_NONBLOCK, 0); @@ -173,7 +176,7 @@ int main(void) return 1; } - if (bind(srv, (const struct sockaddr *)&addr, sizeof(struct sockaddr_un)) == -1) { + if (bind(srv, (const struct sockaddr *)&addr, addr_len) == -1) { xlog(L_WARNING, "Unable to bind %s: %m\n", sock_file); return 1; } diff --git a/support/reexport/reexport.c b/support/reexport/reexport.c index 78516586..0fb49a46 100644 --- a/support/reexport/reexport.c +++ b/support/reexport/reexport.c @@ -21,6 +21,7 @@ static int fsidd_srv = -1; static bool connect_fsid_service(void) { struct sockaddr_un addr; + socklen_t addr_len; char *sock_file; int ret; int s; @@ -33,9 +34,12 @@ static bool connect_fsid_service(void) memset(&addr, 0, sizeof(struct sockaddr_un)); addr.sun_family = AF_UNIX; strncpy(addr.sun_path, sock_file, sizeof(addr.sun_path) - 1); - if (addr.sun_path[0] == '@') + addr_len = sizeof(struct sockaddr_un); + if (addr.sun_path[0] == '@') { /* "abstract" socket namespace */ + addr_len = offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path); addr.sun_path[0] = 0; + } s = socket(AF_UNIX, SOCK_SEQPACKET, 0); if (s == -1) { @@ -43,7 +47,7 @@ static bool connect_fsid_service(void) return false; } - ret = connect(s, (const struct sockaddr *)&addr, sizeof(struct sockaddr_un)); + ret = connect(s, (const struct sockaddr *)&addr, addr_len); if (ret == -1) { xlog(L_WARNING, "Unable to connect %s: %m, is fsidd running?\n", sock_file); return false; From patchwork Tue Nov 21 21:15:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?0L3QsNCx?= X-Patchwork-Id: 13463572 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nabijaczleweli.xyz header.i=@nabijaczleweli.xyz header.b="Z1ZRQtZD" Received: from tarta.nabijaczleweli.xyz (tarta.nabijaczleweli.xyz [139.28.40.42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FDB49E for ; Tue, 21 Nov 2023 13:15:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nabijaczleweli.xyz; s=202305; t=1700601312; bh=V/2u98MfntNlmRi0sX9orXGuHbp4wNeb3u9jKOAH7eM=; h=Date:From:To:Subject:References:In-Reply-To:From; b=Z1ZRQtZDlbDaTIWZtESXF50et2S6s2JupI3VokslgADaVEp6Q7WPxqd7XT+qZpkBt QheyFOBb3m5I/YRCxuJ2/0IKl9GCIzk5VRQmlgho4uEwwjkV6E8u9jSvfL/1NIb/Ab Z1eVs7LIHdxuytPhfWQ7LBo9jg5nCgqES2WLogSjB3ovAx8nphBTJvj4yJhtB4vYoW l04eLk3NPEnPTpFmXpEOR0Ej4oqQ/P+CR/nvzS3fsLZqu1q62/8WBWHYCxJo/2wTg3 UrBAHO6a4voy6YOEL5/cJU28z9fgZ5VrRmQWAldWuKZ7Evh56WI1C4M9n9eHnlKvG/ Ht6QvzTM5Ij8w== Received: from tarta.nabijaczleweli.xyz (unknown [192.168.1.250]) by tarta.nabijaczleweli.xyz (Postfix) with ESMTPSA id 242CD12400; Tue, 21 Nov 2023 22:15:12 +0100 (CET) Date: Tue, 21 Nov 2023 22:15:12 +0100 From: Ahelenia =?utf-8?q?Ziemia=C5=84ska?= To: linux-nfs@vger.kernel.org, NeilBrown , Steve Dickson Subject: [PATCH nfs-utils v2 2/2] testlk: format off_t as llong instead of ssize_t Message-ID: <9d2b8bdc146a1fb48b391ae1adda0b6249ba9c5b.1700601199.git.nabijaczleweli@nabijaczleweli.xyz> References: Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20231103 This, naturally, produces a warning on x32 (and other ILP32 platforms with 64-bit off_t, presumably, but you need to ask for it explicitly there usually): gcc -DHAVE_CONFIG_H -I. -I../../support/include -D_GNU_SOURCE -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -g -O2 -ffile-prefix-map=/tmp/nfs-utils-2.6.3=. -specs=/usr/share/dpkg/pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -g -O2 -ffile-prefix-map=/tmp/nfs-utils-2.6.3=. -specs=/usr/share/dpkg/pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -c -o testlk-testlk.o `test -f 'testlk.c' || echo './'`testlk.c testlk.c: In function ‘main’: testlk.c:84:66: warning: format ‘%zd’ expects argument of type ‘signed size_t’, but argument 4 has type ‘__off_t’ {aka ‘long long int’} [-Wformat=] 84 | printf("%s: conflicting lock by %d on (%zd;%zd)\n", | ~~^ | | | int | %lld 85 | fname, fl.l_pid, fl.l_start, fl.l_len); | ~~~~~~~~~~ | | | __off_t {aka long long int} testlk.c:84:70: warning: format ‘%zd’ expects argument of type ‘signed size_t’, but argument 5 has type ‘__off_t’ {aka ‘long long int’} [-Wformat=] 84 | printf("%s: conflicting lock by %d on (%zd;%zd)\n", | ~~^ | | | int | %lld 85 | fname, fl.l_pid, fl.l_start, fl.l_len); | ~~~~~~~~ | | | __off_t {aka long long int} Upcast to long long, doesn't really matter. It does, of course, raise the question of whether other bits of nfs-utils do something equally broken that just isn't caught by the format validator. Signed-off-by: Ahelenia Ziemiańska Reviewed-by: NeilBrown --- Same as v1: <44adec629186e220ee5d8fd936980ac4a33dc510.1693754442.git.nabijaczleweli@nabijaczleweli.xyz> tools/locktest/testlk.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/locktest/testlk.c b/tools/locktest/testlk.c index ea51f788..c9bd6bac 100644 --- a/tools/locktest/testlk.c +++ b/tools/locktest/testlk.c @@ -81,8 +81,8 @@ main(int argc, char **argv) if (fl.l_type == F_UNLCK) { printf("%s: no conflicting lock\n", fname); } else { - printf("%s: conflicting lock by %d on (%zd;%zd)\n", - fname, fl.l_pid, fl.l_start, fl.l_len); + printf("%s: conflicting lock by %d on (%lld;%lld)\n", + fname, fl.l_pid, (long long)fl.l_start, (long long)fl.l_len); } return 0; }