From nobody Mon Jun 8 05:25:46 2026 Received: from mail-pj1-f65.google.com (mail-pj1-f65.google.com [209.85.216.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7918F23A9BD for ; Wed, 3 Jun 2026 00:33:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780446833; cv=none; b=XCC0owODlac5HFTNHbmXplieJ0Cs2A4E8hz4P4anK75Qq1xYDH3gQVswZeVN/FrXur3ZOEtdZ5NCiU2qlKnw8g0SaWgsNj9535zHIdnc/Xc7sbUeuXQFlSCvifbC/WQsL30hBw16fZnAGbhOVrlMvuz+drwI4PpAej0UH5nclHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780446833; c=relaxed/simple; bh=s2PIL3kHw5bcjmTZXCw7jjgBFIhsTTedP373LqgIUPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oh45kjQYe05/foTpuPmzHjWbIL0DNvm9e4cFwlezzKLW0i+EW8jianxQI6C42oQj7IiFyN51YBdrHGmlypmpYJ9+J8j6U/xBZ1tOf6q7iff20PO7BFANrNg3WbAaKnyMZ85gQ5GD+D4s3/vJZSY+vNqWiiiFNB3c1V0IZL58G3o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=r7WnCThW; arc=none smtp.client-ip=209.85.216.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="r7WnCThW" Received: by mail-pj1-f65.google.com with SMTP id 98e67ed59e1d1-36baeec21dcso3073868a91.3 for ; Tue, 02 Jun 2026 17:33:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780446832; x=1781051632; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Rwt0+gW9sPlUCL+DIlEfwjW/3Pmzh6toOUvHWzfa5kU=; b=r7WnCThWAun0w4/lp+kX5/blcLEdz7t92VYE5Ci5Tnv/B33xbLl0C2XQBgl1mHSLAb jooAY3I4cp2hQSOCLheNisM3JqtA1Rlb2Q8gNqpnIRV0Z/N7BjJkEKCoIo2CQ+O7iKtC MjBgv4NfCQ+6UnOLh+PFHthgEfx1oWun24q1lyMxN0VPzal/ITLM+pkM4tM8DiHDKUim kmBE6T5ZplwD687tKRU/wSNdSUOCvSTsI6ubnCxBtWqPaLdx9yVgtMo0a8UXuQISJndh YsH845LOf7NPK7vFHpUm1krqkoWCtabOvKwrAhiAMkAEWvnUI9/+io1obiFjJIL6Tywm 7hLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780446832; x=1781051632; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Rwt0+gW9sPlUCL+DIlEfwjW/3Pmzh6toOUvHWzfa5kU=; b=sZ2mkDe3s6dWRq4GXQCEA6RlkUMsHGPJXHuLFaW1HeyBv0WYUXpJ15jT88xKCObDgi DzuzeJCKhwF2ufUHfV4rlb+TUieOX8Rxljou/DlqCOg/eLBVtsoewbLiftI9/5RKxGuL KA9MobcjYkHw6liKP8hX9XSr+k2MOzkvp1sub0xwL4Ym1SgB+cmfUEbJVTmf3QKCd/dm l2C4H/C+keeMdWKnZGOxKAiAxDp/+hWwuhyu9ztRsEpo+OyQmefz24pu5VRlKwQqFT03 97fqmw+PHd4MdIs9FpWf8RRIDDvJid3Wz7ZuRT9bFW7qikcsYqelsA6YqKGlpZ6h5wvr oMbQ== X-Forwarded-Encrypted: i=1; AFNElJ/r74M1HnOuSwECOMcq9tJ6ChgIQiTrSHIk/sgRMrRntZshRnIS5qGkSCwcxFIe74nTcuoJYgYu4K9TR3A=@vger.kernel.org X-Gm-Message-State: AOJu0YwxfMG32nFq0qL3Iq/gHoWfRuZtt/sDIvzjh6A5Z+/J/7rjFIrY Ru09p8pI2s88Rh18m0Yd63iJFdn+TCbST2rH6AIApvT2TEmLXf0m/hOA X-Gm-Gg: Acq92OFwBEXC6Vj0qBCF0gHi35ol4uvs1qJ/DTrl+unxYOWUv1Emk3nV7bBt3ImoRH0 L2SLcSw7aFBdnKyO0nlJ3pGV2ZGBqftVoxgR9G9Hm9nv0b2JiSy9tEyXXYnV6l9qXTqzW/3QErc Fr3mq3DKvCp1st7dQbmccMktfs30UczzL0IK+8xnto56uLMK9JpR/RCaSJLQfG7xG8mR/6IiEZv KtHA1vElBtSyCUWCDdzp690vjUKBg93t5WY6b6wh9+z1X6388lI2zZLVLmfiE0Aarm9FAgAO0ou SFvCBa1lHZWjB/ASaw76iYi1QtRiQrHdRBPQcm5I2E2t8+KFJqiFiaGQWSdqL61tXMrFY199tEC 849iqcU0GVP3r6HmPJyeuAl4L4qoH+k5vA88V3N6srXBHrqsrEd2AUWVp8ZJ+bWddIMxi9OquRE +T1LQOCd5dKRu82VrCDmFiOnVVVdM/ X-Received: by 2002:a17:90b:2811:b0:36d:5dbe:2a0d with SMTP id 98e67ed59e1d1-36e30c23af4mr1075420a91.7.1780446831498; Tue, 02 Jun 2026 17:33:51 -0700 (PDT) Received: from laptop ([61.254.29.179]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36e6d169abdsm92012a91.0.2026.06.02.17.33.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 17:33:50 -0700 (PDT) From: Woojin Ji To: yonghong.song@linux.dev Cc: andrii@kernel.org, ast@kernel.org, bpf@vger.kernel.org, daniel@iogearbox.net, eddyz87@gmail.com, jolsa@kernel.org, kuba@kernel.org, linux-kernel@vger.kernel.org, martin.lau@linux.dev, memxor@gmail.com, qmo@kernel.org, random6.xyz@gmail.com, sdf@fomichev.me, song@kernel.org Subject: [PATCH bpf v2] bpftool: Use libbpf error code for flow dissector query Date: Wed, 3 Jun 2026 09:33:39 +0900 Message-ID: <20260603003339.33791-1-random6.xyz@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <22ab9375-e7e6-4929-a80c-0ee9cc74a907@linux.dev> References: <22ab9375-e7e6-4929-a80c-0ee9cc74a907@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" bpf_prog_query() returns a negative errno on failure. query_flow_dissector() currently closes the namespace fd and then reads errno to decide whether -EINVAL means that the running kernel does not support flow dissector queries. That errno check controls behavior, not just diagnostics: -EINVAL is handled as a non-fatal old-kernel case, while any other error makes bpftool net fail. The namespace fd is opened read-only, so close() is not expected to commonly fail in normal use. Still, the BPF_PROG_QUERY error is already available in err, and reading errno after an intervening close() is fragile. If close() does change errno, the compatibility branch may be based on close()'s error instead of the BPF_PROG_QUERY result. This was reproduced with an LD_PRELOAD fault injector that forced BPF_PROG_QUERY for BPF_FLOW_DISSECTOR to fail with EINVAL and then forced close() on the netns fd to fail with EIO. The unpatched bpftool reported "can't query prog: Input/output error". With this change, the same injected failure is handled as the intended non-fatal EINVAL compatibility case. Use the libbpf-returned error code instead. Keep the existing errno reset in the non-fatal path to preserve batch mode behavior. The success path is unchanged. Fixes: 7f0c57fec80f ("bpftool: show flow_dissector attachment status") Assisted-by: ChatGPT:gpt-5.5 Signed-off-by: Woojin Ji Acked-by: Leon Hwang Acked-by: Quentin Monnet Acked-by: Yonghong Song --- v2: - Expand the commit message to explain why relying on errno after close() is fragile for this error path. - Mention that the netns fd is read-only and that close() failure is not expected to be common in normal use. - Add the LD_PRELOAD reproduction result. - No code changes. tools/bpf/bpftool/net.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/bpf/bpftool/net.c b/tools/bpf/bpftool/net.c index 974189da8a91..dba28755d284 100644 --- a/tools/bpf/bpftool/net.c +++ b/tools/bpf/bpftool/net.c @@ -603,14 +603,14 @@ static int query_flow_dissector(struct bpf_attach_inf= o *attach_info) &attach_flags, prog_ids, &prog_cnt); close(fd); if (err) { - if (errno =3D=3D EINVAL) { + if (err =3D=3D -EINVAL) { /* Older kernel's don't support querying * flow dissector programs. */ errno =3D 0; return 0; } - p_err("can't query prog: %s", strerror(errno)); + p_err("can't query prog: %s", strerror(-err)); return -1; } =20 --=20 2.54.0