From owner-freebsd-hackers@freebsd.org Thu Apr 22 20:33:48 2021 Return-Path: Delivered-To: freebsd-hackers@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7BB0A5FE2DD for ; Thu, 22 Apr 2021 20:33:48 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic313-20.consmr.mail.gq1.yahoo.com (sonic313-20.consmr.mail.gq1.yahoo.com [98.137.65.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4FR8Jq2zYMz4mNX for ; Thu, 22 Apr 2021 20:33:47 +0000 (UTC) (envelope-from marklmi@yahoo.com) X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1619123624; bh=JNqoHqFXP76Ax7QyvMIVQswX1Sx/ESLEdQh0xkQpUkh=; h=X-Sonic-MF:Subject:From:Date:To:From:Subject; b=prys0vHq2E0qit/RWVuF8S1R5GMn7/xkemmubYg1KCbkTTPq1P34OmJiOYpA7f/GNG25tQDhiOIuAK1yiesJEi9yamg5aN4EkW7eUNRQsBZB/ksHrFaf2ED37fFNymzE1shZhw0zYxFdxqHtqhXAlSlRW+esolXExxFheY3JP6kroIrSre9nYRiwuz1cVlsD0AObrdB04ALnt56gSHcf06xal0k6EpJXs/OZsStARBebyDEdkBiN0kJUF1AQ3SimWYnN5wuU1H2v2det7uvZHayYPDBpl07F1WeA3Hh9sM+uNp/nXxmcKmxbS6PcSB5Ed2O3mBu44YStesPd+PRpzg== X-YMail-OSG: 2rVR7VoVM1lS5bzWmzgFuAeb5Mrhyts6VOB74NH7C6Z1Vf2MP21.Aw0EpkdhDuU qg63QT4PNUNvD4BQ1jEq5Lp6wGZYYWEO_Zae8oN.WaodifQ_TgZyS7hHD0YZ1QFNozRox9Up9S5K pDbaumDsQAkc0giaOVSwT5eK0wLzNdJn0WVqDm0M3CE9TLGupZwUIh2dDCVu.5Uv2pF4H6eqOmfH WLQKxptKlfEFVXbxDjdyYgl.rLKVXkH.HorPdsmMroRwNvXS_GveXfeg4p9Zs.tHumaiiYFxOyRZ SaQqAw9bv9UPFr7rrBATJtX7zHHY578WngIOUdp_od4VCy2J08_cd.UPQrJTJJn54mYa8vMne131 vlufsUYII233ZBFBjmr1GnQEFn4yPV47AeHcFmcLsZr6Y0RC6_bcDqPbnl0xQkPSiZVzhhdLqpIf s6LfXiOZQiUQvKpCDAI0UHi8wCcgkPUTomeZ6Drb4ZcPvGwq.DiNYEObkyEfIpXoeoWoEB0sQU9t tdSBwP.4ckmVfV6QtvzY4dEq7IqdYlTfDLI0Ge2_Ql_XTB7TQ7LmvFkp1uI_LqVFPbdCLhuF0aYW D0_zJX64OoFpGbdL7lQhnqtpp6crm0XIIocFflQcAXZLQCkW_1TiGkZDbPWUpp1KtYn1HvWWmt.S iwrgPnbOSwT18eXcFgMB.gdEZG06sKjnMT0I5nAVZbH..46vjlhaDWKBj3zNBIoXle95QFFm1eon IoliIYjXVdB5iWo14IRro391oXMehskJrgpWRUjs98j2Yte9BEi_Q8gTl78NMbFF6VOgMDLhUpAX jXF6.QODQhdTyFtz7kBjwPV6hG3VFlhx4T8VKCIbvpx0o7dbMvEkovlXVoqJjOXZpJ0RRdGjIodl DLD25CfxzEDfgqCOwsyXTJ.LNeKv8GRcf5iFNgpPLFg5Osh6b1oMJPKyFEzih.ZJWpufXFWV6diZ AmfPxeZHbUXMiO2C42ZQBK8vnT2CoBHtJ_MRZCeOff5QbKXAcs5h6fcW9eU7h8GLvhzCr4M_0N3u uw6IBlpV.OZ9Y4Ed1DBBdhJgAoGfpWtSsc4S0OF3OlvSnX5rYL82y3UOYYbYf2EWaHox80F9z0YM 7Sd8as2SDC3w2SQZcgGEXAZAxgWWt9jtxlAeE27fnkj18jHJdqCYVa2xze5Ugp8U0YrhyJER7f7u 79CwykNGR5UnNbPcYrRmE3hj3PVhgVFJtzLwur0bRR4g824_M265BxaTH9FfwkonxVfVPazuO1rm cMcyTf9yufT6Ax3F_xVzt7tMnGq7FLtAiRDZfOpeDJPjr_UiHBUwP56gK2zhPRX.dc1K36xPchMi RIoDosWOwdTxMLZM8Hn7gbcpebXppDDD3Si7ePde0mLg6B8HmGjGMCBvYVI2Nmn51QoNzg9cW7kS ow6eiqdPqqPuMqzZwWaEDAf_g5yAZYiZTkCYv0n2mzZCBPkOsPBI5c7y0iEtpIe3b0Q4zHnTki88 6c7neFp1pBlqC1b.ds8eoYAS4vmyyJ66H_gB.oG4iz5curv0VOP13stEEwEojwfrLuEY0d_VrIrs iwIwoJpR0NTxDJ_gV59D1r.xeJFEgxNcMy2br4bVC05xgiBNiT0uL_4Vhnwkd5VZ3Gp2RMaHjt9t HT9o2wGTHCmAd7aA3RYqwvhIl9Si_tYUKZLQu4mo5bjxYuRiAypBhXyO.m5H4fPhHNjCPEUUqDvf 5WCLFlXKyu1XctFvf_kpCyGTWmjrP6xNdVyqRTOpNGE0cjdIrsQlZEfmg1cLoeHBUrjoK.87mLJ7 unxr.JFhKPUSAR85qK.oXbLoecV.24FAX3UgCc3IRzcVGZY1yzVOLQCeFuoUCS55KJEVgpJDEU98 zDPj6VsgtY5jaoK89cXdL2jK53llPqsdwoZZAQfhIkfAu7pwmPYxLpdjRFZHKfIbk1EIF0FU5AI1 _ApDaSQ9E9RDwd2sZ2GohgaDGh1mweB6G9rWBcw64rpB9FVoXKBo_y3qQ2O6Jk1.IBoBUs_F9J1C UMBA9R6kFXmn4Uh4hy5QOWkX5EfXSmxZY.PHqwfFasyp8BByr5L0SphVJ3XASBAP8eby7wjVCxgY 2SMJ.UFGKjoCbLX8ucCTDL_Ap1avPa7qqKY2BbTx0zx.yav72Lpp5oAWrOaEJibMpzakRaL3eeth V2BkiipMEN200gRjkTo5JV.lAtCNQrHfHRr1ORLotNJDljBROdPW2usEuGlPYcuCRW_xoFOQKyLJ gBRAQvjNEI2XQtz3OeMO_j55782zHymkD8xPyd5qi5KLMqHI_OyJjwSmuBuJP1Tn90pghD74li6Q dIxuTUwWILtB0yTJzFqPxvPVVvAVPkxg7r_UpDtLdw0jtXQxMGLxdj1Gl0hOyZGBw3DlnH.m2tQ_ GomY4GIUa.OfRGNTnnvWIBel.JQIJLbUkk8jtiEp7sxji27O1ZaZzhP_Zwjx3d218uW0XgfhCMZa 9SkcljO5Ze3TTp7JU1GHgX4m8HZfCL4sq6H_Xrg1f59R6GMQKMd3y1AhKDZIg8te5balMXAn2aJ0 y8gSeuDQ52unn5d3iIryNYKJEG3iNnuCZJFKzVna_RPhBBH_wsuoG6edaT7UJvp8C9csjVjODwMl N1x__eCHYSGlP X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.gq1.yahoo.com with HTTP; Thu, 22 Apr 2021 20:33:44 +0000 Received: by kubenode525.mail-prod1.omega.gq1.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 9149e8ba8fe7d883abed16682b392ccc; Thu, 22 Apr 2021 20:33:40 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.60.0.2.21\)) Subject: Re: A bug with getsockopt(SOL_LOCAL, LOCAL_PEERCRED) ? From: Mark Millard In-Reply-To: Date: Thu, 22 Apr 2021 13:33:39 -0700 Cc: Gleb Popov , freebsd-hackers Content-Transfer-Encoding: quoted-printable Message-Id: <445774BD-D68B-48A1-856D-F8DC9A480C68@yahoo.com> References: <40116716-D8D9-438D-A168-B26A112D199E@yahoo.com> To: Konstantin Belousov X-Mailer: Apple Mail (2.3654.60.0.2.21) X-Rspamd-Queue-Id: 4FR8Jq2zYMz4mNX X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.50 / 15.00]; MV_CASE(0.50)[]; FREEMAIL_FROM(0.00)[yahoo.com]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[yahoo.com:+]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FREEMAIL_TO(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/20, country:US]; RBL_DBL_DONT_QUERY_IPS(0.00)[98.137.65.83:from]; DWL_DNSWL_NONE(0.00)[yahoo.com:dkim]; SUBJECT_ENDS_QUESTION(1.00)[]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; MID_RHS_MATCH_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; MIME_GOOD(-0.10)[text/plain]; SPAMHAUS_ZRD(0.00)[98.137.65.83:from:127.0.2.255]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[98.137.65.83:from]; RWL_MAILSPIKE_POSSIBLE(0.00)[98.137.65.83:from]; RCVD_COUNT_TWO(0.00)[2]; MAILMAN_DEST(0.00)[freebsd-hackers] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Technical discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Apr 2021 20:33:48 -0000 On 2021-Apr-22, at 12:34, Konstantin Belousov = wrote: > On Thu, Apr 22, 2021 at 09:49:15PM +0300, Gleb Popov wrote: >> On Thu, Apr 22, 2021 at 1:33 PM Konstantin Belousov = >> wrote: >>=20 >>> There is no peer for listening socket. >>>=20 >>> Show minimal code that works for you on Linux. >>>=20 >>=20 >> Here you go: http://arrowd.name/un_linux.cpp >> It is almost identical to FreeBSD one, but works for me on ArchLinux. >=20 > Of course it works because it uses s2, that is, connected and not = listening > socket, for getsockopt(), same as the working FreeBSD version. I made a variant that tries s2 and then s, printing the peercred uid, group id, and pid fields, and built it on Fedora 34. The result was: # ./a.out & ncat -U foobar [1] 18646 s2 data is uid field: 0 groups[0] field: 0 pid field: 18647 s data is uid field: 0 groups[0] field: 0 pid field: 18646 [1]+ Done ./a.out On FreeBSD: # ./a.out & nc -U foobar s2 data is uid field: 0 groups[0] field: 0 pid field: 6984 getsockopt for s failed with Socket is not connected [1] Done ./a.out The code is: #ifndef __FreeBSD__ #define _GNU_SOURCE #endif #include #include #include #include #include #include #ifdef __FreeBSD__ #define FOR_PEERCRED 0 #define CR_GROUP_ID cr_groups[0] #else // Linux #define xucred ucred #define FOR_PEERCRED SOL_SOCKET #define LOCAL_PEERCRED SO_PEERCRED #define cr_uid uid #define CR_GROUP_ID gid #define cr_pid pid #endif #include #include #ifdef __FreeBSD__ #include #endif #include #include void failure(char const * err) { puts(err); puts("failed with"); puts(strerror(errno)); } void die(char const * err) { failure(err); unlink("foobar"); exit(1); } int main() { int s =3D socket(PF_LOCAL, SOCK_STREAM, 0); if(s < 0) die("socket"); struct sockaddr_un addrunix; memset(&addrunix, 0, sizeof(addrunix)); addrunix.sun_family =3D AF_UNIX; memcpy(addrunix.sun_path, "foobar", 6); int r =3D bind(s, (const struct sockaddr *)&addrunix, sizeof(struct = sockaddr_un)); if(r < 0) die("bind"); listen(s, 64); int s2; do { s2 =3D accept4(s, 0, 0, 0); } while (s2 < 0 && errno =3D=3D EAGAIN); if(s2 < 0) die("accept4"); struct xucred s2_creds; socklen_t s2_credSize =3D sizeof(struct xucred); r =3D getsockopt(s2, FOR_PEERCRED, LOCAL_PEERCRED, &s2_creds, = &s2_credSize); if(r < 0) failure("getsockopt for s2"); else printf("s2 data is uid field: %jd groups[0] field: %jd pid = field: %jd\n", (uintmax_t) s2_creds.cr_uid, (uintmax_t) = s2_creds.CR_GROUP_ID, (uintmax_t) s2_creds.cr_pid); struct xucred s_creds; socklen_t s_credSize =3D sizeof(struct xucred); r =3D getsockopt(s, FOR_PEERCRED, LOCAL_PEERCRED, &s_creds, = &s_credSize); if(r < 0) failure("getsockopt for s"); else printf("s data is uid field: %jd groups[0] field: %jd pid field: = %jd\n", (uintmax_t) s_creds.cr_uid, (uintmax_t) s_creds.CR_GROUP_ID, = (uintmax_t) s_creds.cr_pid); unlink("foobar"); return 0; } =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)