From nobody Mon Feb 9 12:11:21 2026 Received: from smtp-relay-internal-0.canonical.com (smtp-relay-internal-0.canonical.com [185.125.188.122]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D851F1D88DB for ; Sun, 9 Mar 2025 13:29:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.125.188.122 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741526993; cv=none; b=go3LPliuRoYpRb6AfvuhiN8Jz43mUEzMpk4AyVkGk7RSAXvXftGYL7uDQjVDE1BqkHThi5e7HzpufDdXrVln2YfHKfy5Q3L/GKZVbx3A791vJX/h9UAClcdX4qv1TIjGUIH5n2ZobMer4XHSFQvhWuqtVEeUlQxEBpk0chygWQU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741526993; c=relaxed/simple; bh=vnuWxUByDaK53vFXT9n7vqyzxlt2qtW+8f94W06a7gQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=re/E3lwm69LuGyV3t5m8NAbN44fGjrIE3ZMh7v3cV0rJMvQCT8DSnFoEf4RqLFoFNpna9YTT6hIjk5NPexIewPvvWV0mzQPw3qMk4wF349rz2YL5oECxRs3JJdvlZtS8GQTYMcl7jyNm4FTn3iStPfVQIi0enIIQIDWmcZKJoxU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com; spf=pass smtp.mailfrom=canonical.com; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b=oRlxWnyb; arc=none smtp.client-ip=185.125.188.122 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="oRlxWnyb" Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id ACFBB3FCCD for ; Sun, 9 Mar 2025 13:29:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1741526981; bh=shYgV0qT/lqjUQTrvdmbHNW7lzUO23tYACdmBi90n70=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oRlxWnybkcFDjXZsxKiEarmghlZFXhhgwlib0iMzHEtAJpZDHI4dAcGennsqiJXr3 r0EzFpAoiY0KogG/FbKFw1P2MbYVrlOfqdMspqiBRA3mQFYQYkMZq9IpRPFS7QOEZH g3ygKbbzX8P9TiW2oZ83wFxUGgIMqPTNj9PpThtiGYv47AGYp+XJukEdFM6+8oGCLF IgZLOltJRmMVvrAsOzMIcbTt29lvcrUprulE+vByl+eMW557c1CwXSHBsTgatRu/VO Y4WL1S2/bA/up5Kp9OjyB/I5As0HVsEa5AWIJzR/k7fvkl7tXP85q/eOwQuQjycJCU dxnVnR4YrV9IA== Received: by mail-ej1-f71.google.com with SMTP id a640c23a62f3a-ac28a2c7c48so59421966b.3 for ; Sun, 09 Mar 2025 06:29:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741526979; x=1742131779; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=shYgV0qT/lqjUQTrvdmbHNW7lzUO23tYACdmBi90n70=; b=prkzc+sSfLfgSY1148n32JnKmHx7ZgpmrMkcTowmpDi54SlSxuM/GibAeI708XjFSl cqhQtomipqeAljpYfq3hQMqt/dVDdeGgHUzEKf8rCtjER+EI4Pn4CjRExPRHfsjNok8z BlI9pCG/zez5L0H7meFRqD+aNyYQ2pkhEbVUOC4ZbPYEBInsw/wPGy4CEmrMCMk8Uazm ApWWTbn1LhdY9YfRcBQHR6Z19YbI419d23wgy1fto2FBQZgpNckDjSUlM/WjJxTItFZB ffuYijj2ElKu4Vx/SckKUEcJQgsoE81lET0joT7kG3K2HRCVqcSkRme07pkg3ZbDhb4P uyBw== X-Forwarded-Encrypted: i=1; AJvYcCUODOtkwtHhaPY8WkgSb/HFMctrN6RvJYu39DVMhoFQBTjtP6xA1Q/GJowR4fq6Q1+nlFekCv9K+Gc6haE=@vger.kernel.org X-Gm-Message-State: AOJu0YypMjyTkd4wL+NriM4V/MokBSARdaDACQA9+48g1JUyt0jg6NNY XDOqP31tQqOLyStRkcw2qKutHKORG8znu8fDiZ5skNkwoORfDVkTmkIxxZOcDyCfsyvIQ132Bqj 1aYVYHieAiwMpEOu2WA5XH1mFAeITf6C5s6lLr3Ch/ToQPKGkC3jRJJ1Ft808yJYVmNWXMWkS2G hh+/QtdKU5Vg== X-Gm-Gg: ASbGnctbAM6xJsnvUCBQUPs0idt7sCYkBxK3FK4SuuzF5pueOTHA4wopNtZIcj0Qss8 3miX9X1TUhofyBPKAqkudAZ/rn2C7rDmOyYZTWl3Hdi/WgHUMhAOXVq9/wlQeJCs0QfAOR3U5Hk FUGqJCB0IuOk3J0N+Lms4cblqZiLO5czKg6w9WXWCzc2zkkrYg/EBIO50uPox3i1lppR0C9JgMQ Cp8P9SeIqPhA7VcpOWFlyRxDG85NQm9SDqtcWX4j3rsWZw4ttFXVjOvFMFgaDGBpHeh4HYdihEe pS8Ufm/W7nqGadUDR1DN+cO6AFBiXl8OgUbcirwZvHImhVHmG4LI1L9Tmpqk2b4fK0x8TPxdDoT jAslVAyFDjwHYPJTU0A== X-Received: by 2002:a17:907:c302:b0:ac2:f93:b7c5 with SMTP id a640c23a62f3a-ac2526e1ba9mr1073987466b.31.1741526979545; Sun, 09 Mar 2025 06:29:39 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEWS1LQrRdoibpiP6escIaOL/a7XzBpJqfiCaikM73Pa+IXdnzBUWE6E4F2v53XQL0h2fMQ5g== X-Received: by 2002:a17:907:c302:b0:ac2:f93:b7c5 with SMTP id a640c23a62f3a-ac2526e1ba9mr1073984866b.31.1741526979165; Sun, 09 Mar 2025 06:29:39 -0700 (PDT) Received: from localhost.localdomain (ipbcc0714d.dynamic.kabel-deutschland.de. [188.192.113.77]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac25943f55csm435897366b.137.2025.03.09.06.29.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:29:38 -0700 (PDT) From: Alexander Mikhalitsyn To: kuniyu@amazon.com Cc: Alexander Mikhalitsyn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, cgroups@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Willem de Bruijn , Leon Romanovsky , Arnd Bergmann , Christian Brauner , Lennart Poettering , Luca Boccassi , Tejun Heo , Johannes Weiner , =?UTF-8?q?Michal=20Koutn=C3=BD?= Subject: [PATCH net-next 1/4] net: unix: print cgroup_id and peer_cgroup_id in fdinfo Date: Sun, 9 Mar 2025 14:28:12 +0100 Message-ID: <20250309132821.103046-2-aleksandr.mikhalitsyn@canonical.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> References: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Cc: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org Cc: cgroups@vger.kernel.org Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: Willem de Bruijn Cc: Leon Romanovsky Cc: Arnd Bergmann Cc: Christian Brauner Cc: Kuniyuki Iwashima Cc: Lennart Poettering Cc: Luca Boccassi Cc: Tejun Heo Cc: Johannes Weiner Cc: "Michal Koutn=C3=BD" Signed-off-by: Alexander Mikhalitsyn Acked-by: Tejun Heo Reviewed-by: Christian Brauner --- net/unix/af_unix.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 7f8f3859cdb3..2b2c0036efc9 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -117,6 +117,7 @@ #include #include #include +#include =20 static atomic_long_t unix_nr_socks; static struct hlist_head bsd_socket_buckets[UNIX_HASH_SIZE / 2]; @@ -861,6 +862,11 @@ static void unix_show_fdinfo(struct seq_file *m, struc= t socket *sock) int nr_fds =3D 0; =20 if (sk) { +#ifdef CONFIG_SOCK_CGROUP_DATA + struct sock *peer; + u64 sk_cgroup_id =3D 0; +#endif + s_state =3D READ_ONCE(sk->sk_state); u =3D unix_sk(sk); =20 @@ -874,6 +880,21 @@ static void unix_show_fdinfo(struct seq_file *m, struc= t socket *sock) nr_fds =3D unix_count_nr_fds(sk); =20 seq_printf(m, "scm_fds: %u\n", nr_fds); + +#ifdef CONFIG_SOCK_CGROUP_DATA + sk_cgroup_id =3D cgroup_id(sock_cgroup_ptr(&sk->sk_cgrp_data)); + seq_printf(m, "cgroup_id: %llu\n", sk_cgroup_id); + + peer =3D unix_peer_get(sk); + if (peer) { + u64 peer_cgroup_id =3D 0; + + peer_cgroup_id =3D cgroup_id(sock_cgroup_ptr(&peer->sk_cgrp_data)); + sock_put(peer); + + seq_printf(m, "peer_cgroup_id: %llu\n", peer_cgroup_id); + } +#endif } } #else --=20 2.43.0 From nobody Mon Feb 9 12:11:21 2026 Received: from smtp-relay-internal-1.canonical.com (smtp-relay-internal-1.canonical.com [185.125.188.123]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D3CD1DDC35 for ; Sun, 9 Mar 2025 13:29:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.125.188.123 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741526999; cv=none; b=BL8cp5NFAyA2133A+k/PmaFWXUHgfJoXD5p0j9BRsgLimQiYLpi/ATPQboU3/X5ll8Te30fHMyEBPc/+5Rpl1VRfvliqgL2InVMc3MQSNQeTogyfSxJEONLKUaOCfq/7cJ63ETHugoDLwUb01WF61G2aB2det2GqBGOoaaPbqC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741526999; c=relaxed/simple; bh=h11slZywu67PPCzd8E5r1pZxOSwbTAwOByW1hwfHQ8Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=M6DscAw7l4u97TB9Iiv4AIqwp8/CB3XvSwIXCbF5j6V/JGps5bOxkICWSJgmlJDlWMd34g8Me+ndqLN8ErLoCewNxS0NY5o4m9vrETUVJ9UgVE5lhJOOnhw9/shNx9PO1LxjfM2fPpOkxeSK+RvcfBIf6Rm6RpCM/wKlK9uKwec= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com; spf=pass smtp.mailfrom=canonical.com; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b=DePFjXu/; arc=none smtp.client-ip=185.125.188.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="DePFjXu/" Received: from mail-ej1-f70.google.com (mail-ej1-f70.google.com [209.85.218.70]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id 25A513FE42 for ; Sun, 9 Mar 2025 13:29:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1741526986; bh=oUkDN9VrMm5b6Y+/DOvznDBPjXORLJgfeSeYgeNTS6Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DePFjXu/AShaiUmWmTFaHJkoZa8XZONUqU9g9ITFRKjzgzYt9asa2RWj/6gxsImLe z1bKC3slsAE8AKxjN7qWGiqDtu4wEXl/6Vk76dCYO/h/FuljbMpJk4DdJRDNT2hW3Y vC9LbR1R47Tym4o6mKBtBI7gqoSQKrj62/peAx1QnSsWOOU7NWn0WBeTWS3oTdjp/U bIS2iwZMovFJQK8TrsxseS1T6WG10ooq3MHx9BbKvBzqi2Z4ZOvxDIY4QguJbz/4oJ 05msNv2C3xZjCXrVtj+Nj4lzfm0WW41vpVLZ/G/AJSBGjlmzAREUZLOlH66IBjEzMa CmqaZR4XnSAjQ== Received: by mail-ej1-f70.google.com with SMTP id a640c23a62f3a-ab39f65dc10so433923366b.1 for ; Sun, 09 Mar 2025 06:29:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741526981; x=1742131781; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oUkDN9VrMm5b6Y+/DOvznDBPjXORLJgfeSeYgeNTS6Y=; b=XRcNcrvTfYxKM8T7miv+qLeJO7/pykhgmjLctnb4BUxVpOxbwSydqGwPnuAao1Ux0P v8kOkuNt5KP4HbQKN/Sjbf0L+ivkZnOPm7AXQ3NxfPzosgB1AuoMIADU7stWzBfU1MC1 88Qzmnj4FG3/ylvca7YoaGOa60H2MOElXrmxc4OiQMndki2WDdBnBrbdr/ITa+Ug/Yy4 M8SHDSypROv7hSpm7AqIVVstVrUni0YONVu4UH2GHvEOWxc3hyWwDG1a3zemOvs1LR3E dwWobtFcDeDv3AbSL/YWbNm6g3GSs117tMHowjbB43MbWsR5zeTg6wVPe7wrNCnZlyd4 wJ4w== X-Forwarded-Encrypted: i=1; AJvYcCVrBz9S5mVvqLWAJp43uFYmR8vXpqR0jfZ2E317CwzAAkGoRfi9YuK4oGxw99BtfVBvA6D8ZJopioDqHbg=@vger.kernel.org X-Gm-Message-State: AOJu0Ywuzz0Z948vAwthUE7tutScx47ptVJ9Z61n1PwhuU4qJoiwEL9d Y0W9UtkZOR6XaX1Z8SLDqb/oZeC1EhbuPEb0/tD5ZS7O/o6hGAIqjLID+VqqBCbPalTaiIFfr+y ac72TNO/UNlCt93IEIQJZWZF1CekuNfhlvNuJGFba8HKrnIPXRWqlM2CR0MW5NBlMu/IN/cfT+y f8jBCf5tbJ1Q== X-Gm-Gg: ASbGncvDmfLLrirwG64/UHAQ28F9+9lrKJDKUtGcNA11ATkO5yCp3+5BT5cavC6I3r4 yp1aXPhE3+KgLcktnl8SBkSwU4jDSZbAQVcbotyA77CLD6JIQupLWAzGpK3dLFKHA8Je9rE7gTI /kkgssDtqC8ys3cQp9GFEkhnS7+AGzAPTXAopRyta8OgISpygDDU1/po3iK8rG4ID2SSYsvEeMJ O3JCz9YIEB5hSMaVqpmOQmNI9L3syvhgpAjNzLIHuzkNZPu4yXnv+vtgvIHYbkjDwGbG3GZayV3 dvMn3Rzi1kU/bDi66sECYS6iLoXzEHywrZrufhg4+VeiHeSXTcFccAQoVCysm4HgtNqTEjGQlAG qET0xFFF9wkakgeNmOA== X-Received: by 2002:a17:907:9615:b0:ac2:9c7d:e129 with SMTP id a640c23a62f3a-ac29c7dee94mr115088066b.38.1741526981515; Sun, 09 Mar 2025 06:29:41 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHnWyfFVWjU228SRznBeLkPmsqMd2onjEQ1MWjIegB/cFAZnvOBfloK324qPC2AGva8B49jNg== X-Received: by 2002:a17:907:9615:b0:ac2:9c7d:e129 with SMTP id a640c23a62f3a-ac29c7dee94mr115085566b.38.1741526981136; Sun, 09 Mar 2025 06:29:41 -0700 (PDT) Received: from localhost.localdomain (ipbcc0714d.dynamic.kabel-deutschland.de. [188.192.113.77]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac25943f55csm435897366b.137.2025.03.09.06.29.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:29:40 -0700 (PDT) From: Alexander Mikhalitsyn To: kuniyu@amazon.com Cc: Alexander Mikhalitsyn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, cgroups@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Willem de Bruijn , Leon Romanovsky , Arnd Bergmann , Christian Brauner , Lennart Poettering , Luca Boccassi , Tejun Heo , Johannes Weiner , =?UTF-8?q?Michal=20Koutn=C3=BD?= Subject: [PATCH net-next 2/4] net: core: add getsockopt SO_PEERCGROUPID Date: Sun, 9 Mar 2025 14:28:13 +0100 Message-ID: <20250309132821.103046-3-aleksandr.mikhalitsyn@canonical.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> References: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add SO_PEERCGROUPID which allows to get cgroup_id for a socket. We already have analogical interfaces to retrieve this information: - inet_diag: INET_DIAG_CGROUP_ID - eBPF: bpf_sk_cgroup_id Having getsockopt() interface makes sense for many applications, because using eBPF is not always an option, while inet_diag has obvious complexety and performance drawbacks if we only want to get this specific info for one specific socket. Cc: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org Cc: cgroups@vger.kernel.org Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: Willem de Bruijn Cc: Leon Romanovsky Cc: Arnd Bergmann Cc: Christian Brauner Cc: Kuniyuki Iwashima Cc: Lennart Poettering Cc: Luca Boccassi Cc: Tejun Heo Cc: Johannes Weiner Cc: "Michal Koutn=C3=BD" Signed-off-by: Alexander Mikhalitsyn Acked-by: Tejun Heo Reviewed-by: Christian Brauner --- arch/alpha/include/uapi/asm/socket.h | 2 + arch/mips/include/uapi/asm/socket.h | 2 + arch/parisc/include/uapi/asm/socket.h | 2 + arch/sparc/include/uapi/asm/socket.h | 2 + include/uapi/asm-generic/socket.h | 2 + net/core/sock.c | 17 +++++++ net/unix/af_unix.c | 63 +++++++++++++++++++++++++ tools/include/uapi/asm-generic/socket.h | 2 + 8 files changed, 92 insertions(+) diff --git a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/include/uapi= /asm/socket.h index 3df5f2dd4c0f..58ce457b2c09 100644 --- a/arch/alpha/include/uapi/asm/socket.h +++ b/arch/alpha/include/uapi/asm/socket.h @@ -150,6 +150,8 @@ =20 #define SO_RCVPRIORITY 82 =20 +#define SO_PEERCGROUPID 83 + #if !defined(__KERNEL__) =20 #if __BITS_PER_LONG =3D=3D 64 diff --git a/arch/mips/include/uapi/asm/socket.h b/arch/mips/include/uapi/a= sm/socket.h index 22fa8f19924a..823fa67f7d79 100644 --- a/arch/mips/include/uapi/asm/socket.h +++ b/arch/mips/include/uapi/asm/socket.h @@ -161,6 +161,8 @@ =20 #define SO_RCVPRIORITY 82 =20 +#define SO_PEERCGROUPID 83 + #if !defined(__KERNEL__) =20 #if __BITS_PER_LONG =3D=3D 64 diff --git a/arch/parisc/include/uapi/asm/socket.h b/arch/parisc/include/ua= pi/asm/socket.h index aa9cd4b951fe..1ee2e858d177 100644 --- a/arch/parisc/include/uapi/asm/socket.h +++ b/arch/parisc/include/uapi/asm/socket.h @@ -142,6 +142,8 @@ =20 #define SO_RCVPRIORITY 0x404D =20 +#define SO_PEERCGROUPID 0x404E + #if !defined(__KERNEL__) =20 #if __BITS_PER_LONG =3D=3D 64 diff --git a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi= /asm/socket.h index 5b464a568664..2fe7d0c48a63 100644 --- a/arch/sparc/include/uapi/asm/socket.h +++ b/arch/sparc/include/uapi/asm/socket.h @@ -143,6 +143,8 @@ =20 #define SO_RCVPRIORITY 0x005b =20 +#define SO_PEERCGROUPID 0x005c + #if !defined(__KERNEL__) =20 =20 diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/s= ocket.h index aa5016ff3d91..903904bb537c 100644 --- a/include/uapi/asm-generic/socket.h +++ b/include/uapi/asm-generic/socket.h @@ -145,6 +145,8 @@ =20 #define SO_RCVPRIORITY 82 =20 +#define SO_PEERCGROUPID 83 + #if !defined(__KERNEL__) =20 #if __BITS_PER_LONG =3D=3D 64 || (defined(__x86_64__) && defined(__ILP32__= )) diff --git a/net/core/sock.c b/net/core/sock.c index a0598518ce89..6dc0b1a8367b 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1946,6 +1946,23 @@ int sk_getsockopt(struct sock *sk, int level, int op= tname, goto lenout; } =20 +#ifdef CONFIG_SOCK_CGROUP_DATA + case SO_PEERCGROUPID: + { + const struct proto_ops *ops; + + if (sk->sk_family !=3D AF_UNIX) + return -EOPNOTSUPP; + + ops =3D READ_ONCE(sock->ops); + if (!ops->getsockopt) + return -EOPNOTSUPP; + + return ops->getsockopt(sock, SOL_SOCKET, optname, optval.user, + optlen.user); + } +#endif + /* Dubious BSD thing... Probably nobody even uses it, but * the UNIX standard wants it for whatever reason... -DaveM */ diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 2b2c0036efc9..3455f38f033d 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -901,6 +901,66 @@ static void unix_show_fdinfo(struct seq_file *m, struc= t socket *sock) #define unix_show_fdinfo NULL #endif =20 +static int unix_getsockopt(struct socket *sock, int level, int optname, + char __user *optval, int __user *optlen) +{ + struct sock *sk =3D sock->sk; + + union { + int val; + u64 val64; + } v; + + int lv =3D sizeof(int); + int len; + + if (level !=3D SOL_SOCKET) + return -ENOPROTOOPT; + + if (get_user(len, optlen)) + return -EFAULT; + + if (len < 0) + return -EINVAL; + + memset(&v, 0, sizeof(v)); + + switch (optname) { +#ifdef CONFIG_SOCK_CGROUP_DATA + case SO_PEERCGROUPID: + { + struct sock *peer; + u64 peer_cgroup_id =3D 0; + + lv =3D sizeof(u64); + if (len < lv) + return -EINVAL; + + peer =3D unix_peer_get(sk); + if (!peer) + return -ENODATA; + + peer_cgroup_id =3D cgroup_id(sock_cgroup_ptr(&peer->sk_cgrp_data)); + sock_put(peer); + + v.val64 =3D peer_cgroup_id; + break; + } +#endif + default: + return -ENOPROTOOPT; + } + + if (len > lv) + len =3D lv; + if (copy_to_user(optval, &v, len)) + return -EFAULT; + if (put_user(len, optlen)) + return -EFAULT; + + return 0; +} + static const struct proto_ops unix_stream_ops =3D { .family =3D PF_UNIX, .owner =3D THIS_MODULE, @@ -910,6 +970,7 @@ static const struct proto_ops unix_stream_ops =3D { .socketpair =3D unix_socketpair, .accept =3D unix_accept, .getname =3D unix_getname, + .getsockopt =3D unix_getsockopt, .poll =3D unix_poll, .ioctl =3D unix_ioctl, #ifdef CONFIG_COMPAT @@ -935,6 +996,7 @@ static const struct proto_ops unix_dgram_ops =3D { .socketpair =3D unix_socketpair, .accept =3D sock_no_accept, .getname =3D unix_getname, + .getsockopt =3D unix_getsockopt, .poll =3D unix_dgram_poll, .ioctl =3D unix_ioctl, #ifdef CONFIG_COMPAT @@ -959,6 +1021,7 @@ static const struct proto_ops unix_seqpacket_ops =3D { .socketpair =3D unix_socketpair, .accept =3D unix_accept, .getname =3D unix_getname, + .getsockopt =3D unix_getsockopt, .poll =3D unix_dgram_poll, .ioctl =3D unix_ioctl, #ifdef CONFIG_COMPAT diff --git a/tools/include/uapi/asm-generic/socket.h b/tools/include/uapi/a= sm-generic/socket.h index aa5016ff3d91..903904bb537c 100644 --- a/tools/include/uapi/asm-generic/socket.h +++ b/tools/include/uapi/asm-generic/socket.h @@ -145,6 +145,8 @@ =20 #define SO_RCVPRIORITY 82 =20 +#define SO_PEERCGROUPID 83 + #if !defined(__KERNEL__) =20 #if __BITS_PER_LONG =3D=3D 64 || (defined(__x86_64__) && defined(__ILP32__= )) --=20 2.43.0 From nobody Mon Feb 9 12:11:21 2026 Received: from smtp-relay-internal-0.canonical.com (smtp-relay-internal-0.canonical.com [185.125.188.122]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A44A1DE2C9 for ; Sun, 9 Mar 2025 13:29:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.125.188.122 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741527001; cv=none; b=bbDXHTCpSKPLwAun1G6PPbyOpuUCDx0rNSU4thxXQ1539zKNAW2dp4o6SzfCrpC0Hl5tEe7mshtOvtBN7TZEukJvwcvFElKohyub0BOCPUCAxZ4oDNMCw2b+k9y+Hn8NZqjQjvDF3ThrHcUKbICK303OQW3h+p2kRnCUy//GD6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741527001; c=relaxed/simple; bh=HBzrftBgtmyJjSlrkubZ14+wzgBNDhuJgvNUC0ysav8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=YYgUJxEOXSRt/GEfZ8SOo2NIKW7cwB3hVnElm+Un/ZgL0TnlBkzBhjNrFv5ua9pVQcOrMhj2TcCXRQrUpWW3+xPngipHcrUuZCJVgzxceXDARPqFoclGLWy30t8NejF7OZ0w3sWUD844Sh9s7KNOBjoI8xCrkWRTO3sbi6tyLUU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com; spf=pass smtp.mailfrom=canonical.com; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b=CyEe1eUF; arc=none smtp.client-ip=185.125.188.122 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="CyEe1eUF" Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 0BDD63FCE7 for ; Sun, 9 Mar 2025 13:29:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1741526990; bh=De9T9eT10I0LuI5V7o8PivgIMdFcydoHgbUnBTWTEUw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=CyEe1eUF6ito/OGMBlQsZnS5ilrqScAUB5paGBECAtEOtmDwere+8LgqnfYLolTcv nTs3zew035jCiDX577RQtqsRLjCB9aT4PcIb6OSGYLtzIZx+FUb61/KCAcuL84X+/H OpYk4OJphC6tTGm535fv6JEG752kU1GKr6jlUueNvjVCZVvy/p2cLH2kHIrDkJQCVj 4vw4TZgThsKfDkg7yqQJ6MKY+fABhMctvjE+8vS9H5JMwSGcpY5MLTeu5tDVDPe3Gr SQaltd0gD2b0pNCs1w1rnGS6QuQPZUMsDH8eYimpH9w9fP0AzLGs1joHL+xE41deHW Dydi3XtOvarPw== Received: by mail-ej1-f71.google.com with SMTP id a640c23a62f3a-ac1e442740cso317834766b.1 for ; Sun, 09 Mar 2025 06:29:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741526983; x=1742131783; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=De9T9eT10I0LuI5V7o8PivgIMdFcydoHgbUnBTWTEUw=; b=aS5mpoo0aVr5yBk96GQxQ96vhByS2XOQ4sZWU4Die8GKnMm47sjFACKUZKN5VHZvtV kPYTi+w+5dGPWYr+x42RygTPXnlCrrm26JVQ6d6Q7GymzPgRTqDyvsQ5D1tTbRIDGxwB AQWS3LRwCAPPk4ZhACN9/UofDnN2wj+cRSuALGP8Hw9K1cf4RXA5VUqwVubEKi1h9iHm jnxnRjhk9V78A3fU3u1RmsffBwhTgBFcuQ9nt1nisfreaXWuJnR9nx7hcXd8kUKoEV3j VQEvUAxl6CK64yonWosY4uXUSNqqgn29Kq4M5A6zfl+8dKp379JEcFbueoNgf1fo40YI EV+g== X-Forwarded-Encrypted: i=1; AJvYcCUgfqWvpflYn+D6+poem7IOBYW6JoKO9PMSuLiSuKZEVBkNS9coAwgqEFWxdcrvPt6wIIJsr9bGVQuxbuQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yyddmvba2XPj0GX+0iyTz/nRvICxhtGLLU6X8CklUwyYDuQWRB/ Is7yYj/OHoMgiJN1Riiubryt/JtGqsBm42EwLN5colBZnVUPvO9OwBwaiqy8e6P2Tg7VmxReWHF MeFL6SywbCccpvm+WY2R2aWcuLZXYaZSmjgNrisytQwlCpeV/tp8w3wU8NIFobuNYeXERb9HUrZ kjzA== X-Gm-Gg: ASbGnct2JKYpiBy2OtgVBhWhxOncCzZmm7uWi3US9u5DtXXYfJ+BF5CokYY2VBX1a0l 9gUmM5nM4LBqBw+dNPvRYIdxdvYcFE59pKUyNpsgYbZ5VPN1Kufe7osSFYVPNDVoDPRvsYXhIPG vSkPUPojy0kWOo/A4/qj3v1f2uhYjaCdZu296a0palkZzGAKUj1uTahjPfPhjk+twrHcrZkYGq1 AOJV2bW0M8sL6jPSrXPfa7xHSsZj1VR56G5h8oflmklGgMHMt4FrCREe3UE0VUlWV0R0+1tm7Y0 SVHDwkGpizoYWeSl+nnfhB9ZBgA243/fLh99SdtJfdTySYnUx/MELIeo7rGHMke6opF6ORePhEG haBDXfTqawV9giWAaug== X-Received: by 2002:a17:907:97d5:b0:abf:6166:d0e0 with SMTP id a640c23a62f3a-ac252fb9c80mr1252828566b.35.1741526983275; Sun, 09 Mar 2025 06:29:43 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG0Jp1lBL5UEDOmoLhr3/1+wDXXnEG000YcKS7uOUaGglmKZVGqoQ8LvIDpjopxUUJhpkTkFg== X-Received: by 2002:a17:907:97d5:b0:abf:6166:d0e0 with SMTP id a640c23a62f3a-ac252fb9c80mr1252824566b.35.1741526982866; Sun, 09 Mar 2025 06:29:42 -0700 (PDT) Received: from localhost.localdomain (ipbcc0714d.dynamic.kabel-deutschland.de. [188.192.113.77]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac25943f55csm435897366b.137.2025.03.09.06.29.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:29:42 -0700 (PDT) From: Alexander Mikhalitsyn To: kuniyu@amazon.com Cc: Alexander Mikhalitsyn , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, cgroups@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Willem de Bruijn , Leon Romanovsky , Arnd Bergmann , Christian Brauner , Lennart Poettering , Luca Boccassi , Tejun Heo , Johannes Weiner , =?UTF-8?q?Michal=20Koutn=C3=BD?= , Shuah Khan Subject: [PATCH net-next 3/4] tools/testing/selftests/cgroup/cgroup_util: add cg_get_id helper Date: Sun, 9 Mar 2025 14:28:14 +0100 Message-ID: <20250309132821.103046-4-aleksandr.mikhalitsyn@canonical.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> References: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Cc: linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org Cc: cgroups@vger.kernel.org Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: Willem de Bruijn Cc: Leon Romanovsky Cc: Arnd Bergmann Cc: Christian Brauner Cc: Kuniyuki Iwashima Cc: Lennart Poettering Cc: Luca Boccassi Cc: Tejun Heo Cc: Johannes Weiner Cc: "Michal Koutn=C3=BD" Cc: Shuah Khan Signed-off-by: Alexander Mikhalitsyn Acked-by: Tejun Heo Reviewed-by: Christian Brauner --- tools/testing/selftests/cgroup/cgroup_util.c | 15 +++++++++++++++ tools/testing/selftests/cgroup/cgroup_util.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/tools/testing/selftests/cgroup/cgroup_util.c b/tools/testing/s= elftests/cgroup/cgroup_util.c index 1e2d46636a0c..b60e0e1433f4 100644 --- a/tools/testing/selftests/cgroup/cgroup_util.c +++ b/tools/testing/selftests/cgroup/cgroup_util.c @@ -205,6 +205,21 @@ int cg_open(const char *cgroup, const char *control, i= nt flags) return open(path, flags); } =20 +/* + * Returns cgroup id on success, or -1 on failure. + */ +uint64_t cg_get_id(const char *cgroup) +{ + struct stat st; + int ret; + + ret =3D stat(cgroup, &st); + if (ret) + return -1; + + return st.st_ino; +} + int cg_write_numeric(const char *cgroup, const char *control, long value) { char buf[64]; diff --git a/tools/testing/selftests/cgroup/cgroup_util.h b/tools/testing/s= elftests/cgroup/cgroup_util.h index 19b131ee7707..3f2d9676ceda 100644 --- a/tools/testing/selftests/cgroup/cgroup_util.h +++ b/tools/testing/selftests/cgroup/cgroup_util.h @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0 */ #include +#include #include =20 #include "../kselftest.h" @@ -39,6 +40,7 @@ long cg_read_key_long(const char *cgroup, const char *con= trol, const char *key); extern long cg_read_lc(const char *cgroup, const char *control); extern int cg_write(const char *cgroup, const char *control, char *buf); extern int cg_open(const char *cgroup, const char *control, int flags); +extern uint64_t cg_get_id(const char *cgroup); int cg_write_numeric(const char *cgroup, const char *control, long value); extern int cg_run(const char *cgroup, int (*fn)(const char *cgroup, void *arg), --=20 2.43.0 From nobody Mon Feb 9 12:11:21 2026 Received: from smtp-relay-internal-0.canonical.com (smtp-relay-internal-0.canonical.com [185.125.188.122]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA9E51DE3A8 for ; Sun, 9 Mar 2025 13:30:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.125.188.122 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741527003; cv=none; b=Wn25cJUw0M93mcmvg88qwZqWsbEb+6v5WgDqUB+Jxs0wYQzwLRBshWo8ecMaulXjiSaTOscR1+0aobY/FuCRrUylekTOUkU03x2cf30M85mQCxwABjZ0TuBCxqDHFcAonTTKy+DPON3GGT2c1VzTc55vN1Ei1DSups1/+Yblpa4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741527003; c=relaxed/simple; bh=fnMK/Ta7Z6dW4Bo0ev4kpeSTLsBbk/uNRa2jnNMBxsM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=f8x9aDgFqziv5om3zDkrcmJRXVqIo6moYEsb5swlKhP0g9DkR1naMQtLJotoTMw9ZQ6eORoHI56OAzAfd+1Gfzq055jjhuwaOrI/gJCfwQcZpWZKA085qBL5ejrXkbBaxtFwcRJDNIzepeS5FcEEMJmcP/w3ds8RApVqtKGHAnA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com; spf=pass smtp.mailfrom=canonical.com; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b=ipX0tbxB; arc=none smtp.client-ip=185.125.188.122 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=canonical.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=canonical.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=canonical.com header.i=@canonical.com header.b="ipX0tbxB" Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 3659C3FCF0 for ; Sun, 9 Mar 2025 13:29:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1741526995; bh=+WlniEeO1sxFM6/UgRu+OkcVvl4eFAZ3k4+mcLNjIi4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ipX0tbxBK+OrkqNA/lZQqkgOW9sYL3FpZpTFsji9DERvkcolMngMXtGZXIxumpbCE 30bM1qrD9qY8BqBSsPE0ZW/9OX6Sk3B3A4ONiNFa1aAop0GKdwx+PdYKMloizWR9wb Ic8ePajKjWo+ggEkTY9dbyDiazL6/IYApsj0TPi4sG0f5AfcH4NuaMGPir6HMNjqIm 2ApLuxOoDuAaYzfEsweIm0RFGLFtjQGc/4kD8cshEu2Z8nXBj4Go552HQ0iXZlOdKo 4eOeeZoc2rrAs4J+Yv+YhGSUaOywrwFn6BmC/FhBQVZ71aMQzRX98oEz3SNa912fHV QNiYVHlK1cpZQ== Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-ab39f65dc10so433926966b.1 for ; Sun, 09 Mar 2025 06:29:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741526986; x=1742131786; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+WlniEeO1sxFM6/UgRu+OkcVvl4eFAZ3k4+mcLNjIi4=; b=WZaAvyJPCHJmPX+vJ5bMwdxabcgrHKUg336E7WkcxZkysbsLq7a4a+Rd3uc2MjVd58 F6+OafPkoEQRmwrvUSaWVXpEMdDDxcrPRwnpFE15NtIwm3+7VliPEUMR/vQ+gcZogMzD 00lTB4f33s1bV1LjBfa7Z90vwhhG6kdSu+g2fwZa7wsLDKjcywfMl4NfZMXwkFtpkEuH u9CRO7bR1bJ3sue6zB4lOqj9FksB7FSDA/oGRNSZ/reLIghATE44NAEWtcSmphXzXm5e lw/MyYdtr52KEnjX3bMN9Y1tYwp5wqxIwEE64HTyZMqWoVX/nOH4kWF2/gBunenXvuHR Le8w== X-Forwarded-Encrypted: i=1; AJvYcCU4IwzMWCwjU2pyIgevJ3Zj30tsA4Vop+FyEkDwQGUFrpToZ2K/iOJcTYdJUQ2mlkOAM5jMORfAHEyMJVo=@vger.kernel.org X-Gm-Message-State: AOJu0YybSJVm+7e2oCnM3Yp8vLgUUvS2o29ze3LDt/oe+hmlmCq7q1hT LvhA8lSHEQatGU7ZS9bdojwwZVTaHGY1Z9Lx/ZYTiEPRwK28xJ+c2wPjxAw/atNn4LwS9lLYQ4C PuLuTD6gDs7m99ksKMRlfzgNteCVgCu+Rluv7oJH/GnoNC6A/4Zm/qYY+filMfE94JjxAjf0dnS ZSiA== X-Gm-Gg: ASbGncsdCAa7A2wAwhDj8MX66ev7BfqFva6OZLnp3iSg17ALE8Rxw3fqtcYMhhSnd/y W2QjdcFDonhrOxwLjVr9DQ1dYRgA710MY3+SgrK63Ev5H8tNikzLbdkxqaG59h6rKSMCplqPH7d bvYxe808UUCQJ18qCmQsmsWNRMOahXCx0QCJEOD7uq5sLofDWSDUm+jnVL1TBYAfPsH97LUu1cz 4eb7KkssQkd5mkStXu0QQ03du6CHLBYiR0t9cUkuZdwH7GBxHy3QR/Auzol490wFj/SqOSOZu+1 cuGIEsYvInA7sBCXMrD8Me3NZccDdURyZgP7d9s5dYVgRCPB6IMVKnj/ZCqmhACbGO2HSKeyqmI 7083hX1QR/5vp6bg6ZQ== X-Received: by 2002:a17:907:720a:b0:ac1:e881:89aa with SMTP id a640c23a62f3a-ac2525b9c95mr1204986766b.5.1741526985926; Sun, 09 Mar 2025 06:29:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFFa95jUlBdWGTjYgXwcr9ZUQLkTVCYf0hxOKWN8Duf76vORogdoI0XKHA/oyP746iZKMUFGA== X-Received: by 2002:a17:907:720a:b0:ac1:e881:89aa with SMTP id a640c23a62f3a-ac2525b9c95mr1204982566b.5.1741526985467; Sun, 09 Mar 2025 06:29:45 -0700 (PDT) Received: from localhost.localdomain (ipbcc0714d.dynamic.kabel-deutschland.de. [188.192.113.77]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac25943f55csm435897366b.137.2025.03.09.06.29.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:29:45 -0700 (PDT) From: Alexander Mikhalitsyn To: kuniyu@amazon.com Cc: Alexander Mikhalitsyn , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, cgroups@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Willem de Bruijn , Leon Romanovsky , Arnd Bergmann , Christian Brauner , Lennart Poettering , Luca Boccassi , Tejun Heo , Johannes Weiner , =?UTF-8?q?Michal=20Koutn=C3=BD?= , Shuah Khan Subject: [PATCH net-next 4/4] tools/testing/selftests/cgroup: add test for SO_PEERCGROUPID Date: Sun, 9 Mar 2025 14:28:15 +0100 Message-ID: <20250309132821.103046-5-aleksandr.mikhalitsyn@canonical.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> References: <20250309132821.103046-1-aleksandr.mikhalitsyn@canonical.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Cc: linux-kselftest@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: netdev@vger.kernel.org Cc: cgroups@vger.kernel.org Cc: "David S. Miller" Cc: Eric Dumazet Cc: Jakub Kicinski Cc: Paolo Abeni Cc: Willem de Bruijn Cc: Leon Romanovsky Cc: Arnd Bergmann Cc: Christian Brauner Cc: Kuniyuki Iwashima Cc: Lennart Poettering Cc: Luca Boccassi Cc: Tejun Heo Cc: Johannes Weiner Cc: "Michal Koutn=C3=BD" Cc: Shuah Khan Signed-off-by: Alexander Mikhalitsyn Acked-by: Tejun Heo Reviewed-by: Christian Brauner --- tools/testing/selftests/cgroup/Makefile | 2 + .../selftests/cgroup/test_so_peercgroupid.c | 308 ++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100644 tools/testing/selftests/cgroup/test_so_peercgroupid.c diff --git a/tools/testing/selftests/cgroup/Makefile b/tools/testing/selfte= sts/cgroup/Makefile index 1b897152bab6..a932ff068081 100644 --- a/tools/testing/selftests/cgroup/Makefile +++ b/tools/testing/selftests/cgroup/Makefile @@ -16,6 +16,7 @@ TEST_GEN_PROGS +=3D test_kill TEST_GEN_PROGS +=3D test_kmem TEST_GEN_PROGS +=3D test_memcontrol TEST_GEN_PROGS +=3D test_pids +TEST_GEN_PROGS +=3D test_so_peercgroupid TEST_GEN_PROGS +=3D test_zswap =20 LOCAL_HDRS +=3D $(selfdir)/clone3/clone3_selftests.h $(selfdir)/pidfd/pidf= d.h @@ -31,4 +32,5 @@ $(OUTPUT)/test_kill: cgroup_util.c $(OUTPUT)/test_kmem: cgroup_util.c $(OUTPUT)/test_memcontrol: cgroup_util.c $(OUTPUT)/test_pids: cgroup_util.c +$(OUTPUT)/test_so_peercgroupid: cgroup_util.c $(OUTPUT)/test_zswap: cgroup_util.c diff --git a/tools/testing/selftests/cgroup/test_so_peercgroupid.c b/tools/= testing/selftests/cgroup/test_so_peercgroupid.c new file mode 100644 index 000000000000..2bf1f00a45c7 --- /dev/null +++ b/tools/testing/selftests/cgroup/test_so_peercgroupid.c @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../kselftest_harness.h" +#include "cgroup_util.h" + +#define clean_errno() (errno =3D=3D 0 ? "None" : strerror(errno)) +#define log_err(MSG, ...) = \ + fprintf(stderr, "(%s:%d: errno: %s) " MSG "\n", __FILE__, __LINE__, \ + clean_errno(), ##__VA_ARGS__) + +#ifndef SO_PEERCGROUPID +#define SO_PEERCGROUPID 83 +#endif + +static void child_die() +{ + exit(1); +} + +struct sock_addr { + char sock_name[32]; + struct sockaddr_un listen_addr; + socklen_t addrlen; +}; + +FIXTURE(so_peercgroupid) +{ + int server; + pid_t client_pid; + int sync_sk[2]; + struct sock_addr server_addr; + struct sock_addr *client_addr; + char cgroup_root[PATH_MAX]; + char *test_cgroup1; + char *test_cgroup2; +}; + +FIXTURE_VARIANT(so_peercgroupid) +{ + int type; + bool abstract; +}; + +FIXTURE_VARIANT_ADD(so_peercgroupid, stream_pathname) +{ + .type =3D SOCK_STREAM, + .abstract =3D 0, +}; + +FIXTURE_VARIANT_ADD(so_peercgroupid, stream_abstract) +{ + .type =3D SOCK_STREAM, + .abstract =3D 1, +}; + +FIXTURE_VARIANT_ADD(so_peercgroupid, seqpacket_pathname) +{ + .type =3D SOCK_SEQPACKET, + .abstract =3D 0, +}; + +FIXTURE_VARIANT_ADD(so_peercgroupid, seqpacket_abstract) +{ + .type =3D SOCK_SEQPACKET, + .abstract =3D 1, +}; + +FIXTURE_VARIANT_ADD(so_peercgroupid, dgram_pathname) +{ + .type =3D SOCK_DGRAM, + .abstract =3D 0, +}; + +FIXTURE_VARIANT_ADD(so_peercgroupid, dgram_abstract) +{ + .type =3D SOCK_DGRAM, + .abstract =3D 1, +}; + +FIXTURE_SETUP(so_peercgroupid) +{ + self->client_addr =3D mmap(NULL, sizeof(*self->client_addr), PROT_READ | = PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); + ASSERT_NE(MAP_FAILED, self->client_addr); + + self->cgroup_root[0] =3D '\0'; +} + +FIXTURE_TEARDOWN(so_peercgroupid) +{ + close(self->server); + + kill(self->client_pid, SIGKILL); + waitpid(self->client_pid, NULL, 0); + + if (!variant->abstract) { + unlink(self->server_addr.sock_name); + unlink(self->client_addr->sock_name); + } + + if (strlen(self->cgroup_root) > 0) { + cg_enter_current(self->cgroup_root); + + if (self->test_cgroup1) + cg_destroy(self->test_cgroup1); + free(self->test_cgroup1); + + if (self->test_cgroup2) + cg_destroy(self->test_cgroup2); + free(self->test_cgroup2); + } +} + +static void fill_sockaddr(struct sock_addr *addr, bool abstract) +{ + char *sun_path_buf =3D (char *)&addr->listen_addr.sun_path; + + addr->listen_addr.sun_family =3D AF_UNIX; + addr->addrlen =3D offsetof(struct sockaddr_un, sun_path); + snprintf(addr->sock_name, sizeof(addr->sock_name), "so_peercgroupid_%d", = getpid()); + addr->addrlen +=3D strlen(addr->sock_name); + if (abstract) { + *sun_path_buf =3D '\0'; + addr->addrlen++; + sun_path_buf++; + } else { + unlink(addr->sock_name); + } + memcpy(sun_path_buf, addr->sock_name, strlen(addr->sock_name)); +} + +static void client(FIXTURE_DATA(so_peercgroupid) *self, + const FIXTURE_VARIANT(so_peercgroupid) *variant) +{ + int cfd, err; + socklen_t len; + uint64_t peer_cgroup_id =3D 0, test_cgroup1_id =3D 0, test_cgroup2_id =3D= 0; + char state; + + cfd =3D socket(AF_UNIX, variant->type, 0); + if (cfd < 0) { + log_err("socket"); + child_die(); + } + + if (variant->type =3D=3D SOCK_DGRAM) { + fill_sockaddr(self->client_addr, variant->abstract); + + if (bind(cfd, (struct sockaddr *)&self->client_addr->listen_addr, self->= client_addr->addrlen)) { + log_err("bind"); + child_die(); + } + } + + /* negative testcase: no peer for socket yet */ + len =3D sizeof(peer_cgroup_id); + err =3D getsockopt(cfd, SOL_SOCKET, SO_PEERCGROUPID, &peer_cgroup_id, &le= n); + if (!err || (errno !=3D ENODATA)) { + log_err("getsockopt must fail with errno =3D=3D ENODATA when socket has = no peer"); + child_die(); + } + + if (connect(cfd, (struct sockaddr *)&self->server_addr.listen_addr, + self->server_addr.addrlen) !=3D 0) { + log_err("connect"); + child_die(); + } + + state =3D 'R'; + write(self->sync_sk[1], &state, sizeof(state)); + + read(self->sync_sk[1], &test_cgroup1_id, sizeof(uint64_t)); + read(self->sync_sk[1], &test_cgroup2_id, sizeof(uint64_t)); + + len =3D sizeof(peer_cgroup_id); + if (getsockopt(cfd, SOL_SOCKET, SO_PEERCGROUPID, &peer_cgroup_id, &len)) { + log_err("Failed to get SO_PEERCGROUPID"); + child_die(); + } + + /* + * There is a difference between connection-oriented sockets + * and connectionless ones from the perspective of SO_PEERCGROUPID. + * + * sk->sk_cgrp_data is getting filled when we allocate struct sock (see c= all to cgroup_sk_alloc()). + * For DGRAM socket, self->server socket is our peer and by the time when= we allocate it, + * parent process sits in a test_cgroup1. Then it changes cgroup to test_= cgroup2, but it does not + * affect anything. + * For STREAM/SEQPACKET socket, self->server is not our peer, but that on= e we get from accept() + * syscall. And by the time when we call accept(), parent process sits in= test_cgroup2. + * + * Let's ensure that it works like that and if it get changed then we sho= uld detect it + * as it's a clear UAPI change. + */ + if (variant->type =3D=3D SOCK_DGRAM) { + /* cgroup id from SO_PEERCGROUPID should be equal to the test_cgroup1_id= */ + if (peer_cgroup_id !=3D test_cgroup1_id) { + log_err("peer_cgroup_id !=3D test_cgroup1_id: %" PRId64 " !=3D %" PRId6= 4, peer_cgroup_id, test_cgroup1_id); + child_die(); + } + } else { + /* cgroup id from SO_PEERCGROUPID should be equal to the test_cgroup2_id= */ + if (peer_cgroup_id !=3D test_cgroup2_id) { + log_err("peer_cgroup_id !=3D test_cgroup2_id: %" PRId64 " !=3D %" PRId6= 4, peer_cgroup_id, test_cgroup2_id); + child_die(); + } + } +} + +TEST_F(so_peercgroupid, test) +{ + uint64_t test_cgroup1_id, test_cgroup2_id; + int err; + int pfd; + char state; + int child_status =3D 0; + + if (cg_find_unified_root(self->cgroup_root, sizeof(self->cgroup_root), NU= LL)) + ksft_exit_skip("cgroup v2 isn't mounted\n"); + + self->test_cgroup1 =3D cg_name(self->cgroup_root, "so_peercgroupid_cg1"); + ASSERT_NE(NULL, self->test_cgroup1); + + self->test_cgroup2 =3D cg_name(self->cgroup_root, "so_peercgroupid_cg2"); + ASSERT_NE(NULL, self->test_cgroup2); + + err =3D cg_create(self->test_cgroup1); + ASSERT_EQ(0, err); + + err =3D cg_create(self->test_cgroup2); + ASSERT_EQ(0, err); + + test_cgroup1_id =3D cg_get_id(self->test_cgroup1); + ASSERT_LT(0, test_cgroup1_id); + + test_cgroup2_id =3D cg_get_id(self->test_cgroup2); + ASSERT_LT(0, test_cgroup2_id); + + /* enter test_cgroup1 before allocating a socket */ + err =3D cg_enter_current(self->test_cgroup1); + ASSERT_EQ(0, err); + + self->server =3D socket(AF_UNIX, variant->type, 0); + ASSERT_NE(-1, self->server); + + /* enter test_cgroup2 after allocating a socket */ + err =3D cg_enter_current(self->test_cgroup2); + ASSERT_EQ(0, err); + + fill_sockaddr(&self->server_addr, variant->abstract); + + err =3D bind(self->server, (struct sockaddr *)&self->server_addr.listen_a= ddr, self->server_addr.addrlen); + ASSERT_EQ(0, err); + + if (variant->type !=3D SOCK_DGRAM) { + err =3D listen(self->server, 1); + ASSERT_EQ(0, err); + } + + err =3D socketpair(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0, self->sync_sk); + EXPECT_EQ(err, 0); + + self->client_pid =3D fork(); + ASSERT_NE(-1, self->client_pid); + if (self->client_pid =3D=3D 0) { + close(self->server); + close(self->sync_sk[0]); + client(self, variant); + exit(0); + } + close(self->sync_sk[1]); + + if (variant->type !=3D SOCK_DGRAM) { + pfd =3D accept(self->server, NULL, NULL); + ASSERT_NE(-1, pfd); + } else { + pfd =3D self->server; + } + + /* wait until the child arrives at checkpoint */ + read(self->sync_sk[0], &state, sizeof(state)); + ASSERT_EQ(state, 'R'); + + write(self->sync_sk[0], &test_cgroup1_id, sizeof(uint64_t)); + write(self->sync_sk[0], &test_cgroup2_id, sizeof(uint64_t)); + + close(pfd); + waitpid(self->client_pid, &child_status, 0); + ASSERT_EQ(0, WIFEXITED(child_status) ? WEXITSTATUS(child_status) : 1); +} + +TEST_HARNESS_MAIN --=20 2.43.0