<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Günther&#39;s Wiki</title>
    <link>https://wiki.gnoack.org/</link>
    <description>Günther Noack&#39;s wiki</description>
    <pubDate>Fri, 16 Oct 2026 19:47:38 +0000</pubDate>
    <lastBuildDate>Sun, 11 Oct 2026 20:05:11 +0000</lastBuildDate>
    <item>
      <title>Advanced Programming In The Unix Environment</title>
      <link>https://wiki.gnoack.org/AdvancedProgrammingInTheUnixEnvironment</link>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.apuebook.com/&#34;&gt;http://www.apuebook.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739&#34;&gt;https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I cannot recommend this book enough.&lt;/p&gt;&#xA;</description>
      <pubDate>Sun, 11 Oct 2026 19:00:03 +0000</pubDate>
    </item>
    <item>
      <title>Controlling Terminal Acquisition</title>
      <link>https://wiki.gnoack.org/ControllingTerminalAcquisition</link>
      <description>&lt;p&gt;On Linux, a daemon that accidentally opens a terminal device can accidentally make that terminal its controlling terminal.&lt;/p&gt;&#xA;&lt;p&gt;Controlling terminals have a lot of power.  Specifically, they can send signals to that daemon going forward and also interrupt the processes&amp;rsquo; execution.  If an attacker can predict and write one of the file paths opened by a daemon, if that daemon does not pass the special &lt;code&gt;O_NOCTTY&lt;/code&gt; flag, then they can create a pseudoterminal that they control and possibly make the daemon attach to it, putting themselves in the position of sending signals to that daemon.&lt;/p&gt;&#xA;&lt;p&gt;This is described in more detail in &lt;a href=&#34;http://man.gnoack.org/7/daemon&#34;&gt;&lt;em&gt;daemon&lt;/em&gt;(7)&lt;/a&gt;,&#xA;where it is listed as the last item to look for when implementing a daemon:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As new-style daemons are invoked without a controlling TTY (but as&#xA;their own session leaders) care should be taken to always specify&#xA;&lt;code&gt;O_NOCTTY&lt;/code&gt; on &lt;a href=&#34;https://man.gnoack.org/2/open&#34;&gt;&lt;em&gt;open&lt;/em&gt;(2)&lt;/a&gt; calls that&#xA;possibly reference a TTY device node,&#xA;so that no controlling TTY is accidentally acquired.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;What is the portable way to purposefully acquire a controlling terminal?&lt;/h2&gt;&#xA;&lt;p&gt;First &lt;a href=&#34;https://man.gnoack.org/2/open&#34;&gt;&lt;em&gt;open&lt;/em&gt;(2)&lt;/a&gt; the terminal device, then call the &lt;code&gt;TIOCSCTTY&lt;/code&gt; IOCTL to make it the controlling terminal.&lt;/p&gt;&#xA;&lt;p&gt;This is a (correct) snippet from the &lt;code&gt;foot&lt;/code&gt; terminal source code, file &lt;code&gt;slave.c&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-good&#34;&gt;pts = open(pts_name, O_RDWR);&#xA;if (pts == -1) {&#xA;    LOG_ERRNO(&amp;quot;failed to open pseudo terminal slave device&amp;quot;);&#xA;    goto err;&#xA;}&#xA;&#xA;if (ioctl(pts, TIOCSCTTY, 0) &amp;lt; 0) {&#xA;    LOG_ERRNO(&amp;quot;failed to configure controlling terminal&amp;quot;);&#xA;    goto err;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2&gt;What happens on other Operating Systems?&lt;/h2&gt;&#xA;&lt;p&gt;Other UNIX-like operating systems have largely addressed the issue &amp;ndash; &lt;a href=&#34;https://man.gnoack.org/2/open&#34;&gt;&lt;em&gt;open&lt;/em&gt;(2)&lt;/a&gt; does not implicitly attach to a controlling terminal any more, and attachment must be done explicitly with the IOCTL.&lt;/p&gt;&#xA;&lt;blockquote class=&#34;info&#34;&gt;&lt;p&gt;💡 Software which has been ported to run on the BSDs is already doing it correctly.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3&gt;The BSDs require the IOCTL for attachment&lt;/h3&gt;&#xA;&lt;p&gt;According to &lt;a href=&#34;/AdvancedProgrammingInTheUnixEnvironment&#34;&gt;AdvancedProgrammingInTheUnixEnvironment&lt;/a&gt; (3rd edition),&#xA;&lt;a href=&#34;https://stackoverflow.com/a/51597875&#34;&gt;section 9.6&lt;/a&gt;,&#xA;the split was initially between &lt;strong&gt;BSD-based systems (which only attach with the IOCTL)&lt;/strong&gt;&#xA;and System V-based systems (which attach implicitly on &lt;em&gt;open&lt;/em&gt;(2)).&lt;/p&gt;&#xA;&lt;p&gt;For the three main BSD derivatives, the man page &lt;em&gt;termios&lt;/em&gt;(4)&#xA;(&lt;a href=&#34;https://man.freebsd.org/cgi/man.cgi?query=termios&#34;&gt;FreeBSD&lt;/a&gt;,&#xA;&lt;a href=&#34;https://man.openbsd.org/termios&#34;&gt;OpenBSD&lt;/a&gt;,&#xA;&lt;a href=&#34;https://man.netbsd.org/termios.4&#34;&gt;NetBSD&lt;/a&gt;)&#xA;has the same wording:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A controlling terminal is never acquired by merely opening a terminal device file.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3&gt;Mac OS attaches implicitly on &lt;em&gt;open&lt;/em&gt;(2)&lt;/h3&gt;&#xA;&lt;p&gt;According to &lt;a href=&#34;/AdvancedProgrammingInTheUnixEnvironment&#34;&gt;AdvancedProgrammingInTheUnixEnvironment&lt;/a&gt;,&#xA;on Mac OS,&#xA;an &lt;em&gt;open&lt;/em&gt;(2) on a terminal does the attachment implicitly.&lt;/p&gt;&#xA;&lt;h2&gt;Interesting resources&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://codesearch.debian.net/search?q=ioctl.*TIOCSCTTY&amp;amp;literal=0&amp;amp;perpkg=1&#34;&gt;Debian codesearch for &lt;code&gt;TIOCSCTTY&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      <pubDate>Sun, 11 Oct 2026 18:17:10 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Listen Control</title>
      <link>https://wiki.gnoack.org/LandlockListenControl</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/15&#34;&gt;Bug (for TCP)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</description>
      <pubDate>Tue, 01 Sep 2026 19:51:36 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Sctp Port Control</title>
      <link>https://wiki.gnoack.org/LandlockSctpPortControl</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/40&#34;&gt;Bug&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</description>
      <pubDate>Tue, 01 Sep 2026 19:50:14 +0000</pubDate>
    </item>
    <item>
      <title>Big Landlock Networking Fix</title>
      <link>https://wiki.gnoack.org/BigLandlockNetworkingFix</link>
      <description>&lt;p&gt;&lt;img src=&#34;https://blog.gnoack.org/images/bsd_sockets.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Landlock&amp;rsquo;s current features for restricting networking are limited as of today (September 2026).&lt;/p&gt;&#xA;&lt;p&gt;In my understanding, the missing pieces are:&lt;/p&gt;&#xA;&lt;p&gt;The way to think about this is by considering the state graph for socket connections on connection-oriented protocols.&#xA;Operations that we &lt;em&gt;should&lt;/em&gt; restrict are highlighted in red:&lt;/p&gt;&#xA;&lt;div id=&#39;pikchr-0&#39; class=&#39;pikchr&#39;&gt;&#xA;&lt;div class=&#39;pikchr-svg&#39; style=&#39;max-width:602px&#39;&gt;&#xA;&lt;svg xmlns=&#39;http://www.w3.org/2000/svg&#39; style=&#39;font-size:initial;&#39; viewBox=&#34;0 0 602.899 116.1&#34; data-pikchr-date=&#34;20250319&#34;&gt;&#xA;&lt;polygon points=&#34;74.16,59.94 62.64,64.26 62.64,55.62&#34; style=&#34;fill:rgb(255,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M2.16,59.94L68.4,59.94&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(255,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;38.16&#34; y=&#34;48.24&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(255,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;socket()&lt;/text&gt;&#xA;&lt;path d=&#34;M74.16,77.94L182.16,77.94L182.16,41.94L74.16,41.94Z&#34;  style=&#34;fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;128.16&#34; y=&#34;59.94&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;fresh socket&lt;/text&gt;&#xA;&lt;path d=&#34;M182.16,59.94L189.36,59.94L189.36,23.94&#34;  style=&#34;fill:none;stroke-width:2.16;stroke-linejoin:round;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;261.36,23.94 249.84,28.26 249.84,19.62&#34; style=&#34;fill:rgb(255,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M189.36,23.94L255.6,23.94&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(255,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;225.36&#34; y=&#34;12.24&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(255,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;listen()&lt;/text&gt;&#xA;&lt;path d=&#34;M261.36,41.94L390.96,41.94L390.96,5.94L261.36,5.94Z&#34;  style=&#34;fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;326.16&#34; y=&#34;23.94&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;listening socket&lt;/text&gt;&#xA;&lt;polygon points=&#34;462.96,23.94 451.44,28.26 451.44,19.62&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M390.96,23.94L457.2,23.94&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;426.96&#34; y=&#34;12.24&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;accept()&lt;/text&gt;&#xA;&lt;path d=&#34;M462.96,41.94L592.56,41.94L592.56,5.94L462.96,5.94Z&#34;  style=&#34;fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;527.76&#34; y=&#34;23.94&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;connected socket&lt;/text&gt;&#xA;&lt;path d=&#34;M182.16,59.94L189.36,59.94L189.36,95.94&#34;  style=&#34;fill:none;stroke-width:2.16;stroke-linejoin:round;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;261.36,95.94 249.84,100.26 249.84,91.62&#34; style=&#34;fill:rgb(255,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M189.36,95.94L255.6,95.94&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(255,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;225.36&#34; y=&#34;84.24&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(255,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;connect()&lt;/text&gt;&#xA;&lt;path d=&#34;M261.36,113.94L390.96,113.94L390.96,77.94L261.36,77.94Z&#34;  style=&#34;fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;326.16&#34; y=&#34;95.94&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;connected socket&lt;/text&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This diagram omits &lt;em&gt;bind&lt;/em&gt;(2), because both &lt;em&gt;listen&lt;/em&gt;(2) and &lt;em&gt;connect&lt;/em&gt;(2) work also without it.&lt;/li&gt;&#xA;&lt;li&gt;For connection-less protocols, the states are somewhat different, see &lt;a href=&#34;/LandlockUdpPortControl&#34;&gt;LandlockUdpPortControl&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;1. Make it impossible to contruct sockets of certain types&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Control &lt;a href=&#34;https://man.gnoack.org/2/socket&#34;&gt;&lt;em&gt;socket&lt;/em&gt;(2)&lt;/a&gt;: Restrict creating sockets, filtered by &lt;code&gt;family&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt; and &lt;code&gt;protocol&lt;/code&gt; arguments: &lt;a href=&#34;/LandlockSocketTypeControl&#34;&gt;LandlockSocketTypeControl&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.gnoack.org/post/ephemeral-listen&#34;&gt;As I discussed on my weblog before&lt;/a&gt;,&#xA;you can absolutely create listening sockets without calling &lt;a href=&#34;https://man.gnoack.org/2/bind&#34;&gt;&lt;em&gt;bind&lt;/em&gt;(2)&lt;/a&gt;.  &lt;strong&gt;It is &lt;em&gt;listen&lt;/em&gt;(2), not &lt;em&gt;bind&lt;/em&gt;(2), which starts to listen on a port&lt;/strong&gt;, and it hands out an emphemeral port if needed.&lt;/p&gt;&#xA;&lt;h2&gt;2. Control operations through which you can create connections&lt;/h2&gt;&#xA;&lt;p&gt;For socket types that &lt;em&gt;are&lt;/em&gt; common, we may have cases where we &lt;em&gt;want&lt;/em&gt; to permit their creation and use, but restrict the ways in which incoming and outgoing interactions can be done.&lt;/p&gt;&#xA;&lt;h3&gt;2.1. More protocol support&lt;/h3&gt;&#xA;&lt;p&gt;Control &lt;em&gt;bind&lt;/em&gt;(2) and &lt;em&gt;connect&lt;/em&gt;(2) for these additional connection-oriented protocols:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multipath-TCP:&lt;/strong&gt; &lt;a href=&#34;/LandlockMptcpPortControl&#34;&gt;LandlockMptcpPortControl&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SCTP:&lt;/strong&gt; &lt;a href=&#34;/LandlockSctpPortControl&#34;&gt;LandlockSctpPortControl&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SMC:&lt;/strong&gt; ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Compare with &lt;a href=&#34;https://docs.kernel.org/userspace-api/landlock.html#erratum-1-tcp-socket-identification&#34;&gt;Landlock erratum 1&lt;/a&gt;:&#xA;In the initial version of the &lt;a href=&#34;/LandlockTcpPortControl&#34;&gt;LandlockTcpPortControl&lt;/a&gt;, these additional protocols were accidentally restricted as they also use sockets of family &lt;code&gt;AF_INET&lt;/code&gt;/&lt;code&gt;AF_INET6&lt;/code&gt; and type &lt;code&gt;SOCK_STREAM&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Related Landlock controls which already exist:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/LandlockTcpPortControl&#34;&gt;LandlockTcpPortControl&lt;/a&gt; (connection-oriented)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/LandlockUdpPortControl&#34;&gt;LandlockUdpPortControl&lt;/a&gt; (connection-less)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/LandlockUnixConnectControl&#34;&gt;LandlockUnixConnectControl&lt;/a&gt; and &lt;code&gt;LANDLOCK_ACCESS_FS_MAKE_SOCK&lt;/code&gt; (connection-oriented)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;2.2. Control &lt;em&gt;listen&lt;/em&gt;(2)&lt;/h3&gt;&#xA;&lt;p&gt;Additionally:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Control &lt;a href=&#34;https://man.gnoack.org/2/listen&#34;&gt;&lt;em&gt;listen&lt;/em&gt;(2)&lt;/a&gt; for all of the protocols where we restrict &lt;em&gt;connect&lt;/em&gt;(2) as well: &lt;a href=&#34;/LandlockListenControl&#34;&gt;LandlockListenControl&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;&#xA;img { border-radius: 1em; }&#xA;.pikchr-svg { margin: 0 auto; }&#xA;&lt;/style&gt;</description>
      <pubDate>Tue, 01 Sep 2026 19:36:17 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Mptcp Port Control</title>
      <link>https://wiki.gnoack.org/LandlockMptcpPortControl</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;📧 &lt;a href=&#34;https://lore.kernel.org/all/20260830201650.67050-1-gnoack3000@gmail.com/&#34;&gt;Patch&lt;/a&gt;&#xA;🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/54&#34;&gt;Bug&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A part of the &lt;a href=&#34;/BigLandlockNetworkingFix&#34;&gt;BigLandlockNetworkingFix&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s like &lt;a href=&#34;/LandlockTcpPortControl&#34;&gt;LandlockTcpPortControl&lt;/a&gt;, but for Multipath-TCP.&lt;/p&gt;&#xA;&lt;p&gt;Since MPTCP is backwards compatible with regular TCP,&#xA;restricting MPTCP in one way or another is needed to effectively restrict the creation of incoming and outgoing TCP connections.&lt;/p&gt;&#xA;</description>
      <pubDate>Tue, 01 Sep 2026 18:16:39 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Udp Port Control</title>
      <link>https://wiki.gnoack.org/LandlockUdpPortControl</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;in Linux 7.2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Adds &lt;code&gt;LANDLOCK_ACCESS_NET_BIND_UDP&lt;/code&gt; and &lt;code&gt;LANDLOCK_ACCESS_NET_CONNECT_SEND_UDP&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TODO: Merge this page with &lt;a href=&#34;/LandlockTcpPortControl&#34;&gt;LandlockTcpPortControl&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Landlock can restrict the use of &lt;a href=&#34;https://man7.org/linux/man-pages/man2/connect.2.html&#34;&gt;&lt;em&gt;connect&lt;/em&gt;(2)&lt;/a&gt; and &lt;a href=&#34;https://man7.org/linux/man-pages/man2/bind.2.html&#34;&gt;&lt;em&gt;bind&lt;/em&gt;(2)&lt;/a&gt; with UDP ports.&lt;/p&gt;&#xA;&lt;h2&gt;API&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://docs.kernel.org/userspace-api/landlock.html#c.landlock_ruleset_attr&#34;&gt;&lt;code&gt;struct landlock_ruleset_attr&lt;/code&gt;&lt;/a&gt;, in the field:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-good&#34;&gt;__u64 handled_access_net;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;you can now set:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;LANDLOCK_ACCESS_NET_BIND_UDP&lt;/code&gt;: Bind a UDP socket to a local port.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LANDLOCK_ACCESS_NET_CONNECT_SEND_UDP&lt;/code&gt;: Connect or send via a UDP socket.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=299eccf99668&#34;&gt;Documentation commit&lt;/a&gt;&lt;/p&gt;&#xA;</description>
      <pubDate>Fri, 21 Aug 2026 09:02:39 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Posix Message Queue Control</title>
      <link>https://wiki.gnoack.org/LandlockPosixMessageQueueControl</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;&lt;a href=&#34;https://lore.kernel.org/all/20260722122952.42149-1-oxana@cloudflare.com/&#34;&gt;Review Thread&lt;/a&gt;&#xA;| 🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/29&#34;&gt;Bug&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Review notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;API for POSIX message queues: &lt;code&gt;mq_open()&lt;/code&gt;, &lt;code&gt;mq_close()&lt;/code&gt;, &lt;code&gt;mq_unlink()&lt;/code&gt; etc.&lt;/li&gt;&#xA;&lt;li&gt;Under the hood,&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IPC namespace holds a reference to the mqueuefs&lt;/li&gt;&#xA;&lt;li&gt;Operates on files in that file system as a registration mechanism&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;mqueuefs can be mounted on &lt;code&gt;/dev/mqueue&lt;/code&gt; using:&#xA;&lt;pre&gt;&lt;code class=&#34;language-good&#34;&gt;mount -t mqueue none /dev/mqueue&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Maybe surprisingly, &lt;code&gt;LANDLOCK_ACCESS_FS_READ_FILE&lt;/code&gt; and &lt;code&gt;LANDLOCK_ACCESS_FS_WRITE_FILE&lt;/code&gt; already restrict the opening of mqueuefs files, and that extends to opens happening through &lt;code&gt;mq_open(2)&lt;/code&gt;!&lt;/p&gt;&#xA;</description>
      <pubDate>Fri, 21 Aug 2026 07:13:38 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Tracepoints</title>
      <link>https://wiki.gnoack.org/LandlockTracepoints</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;📧 &lt;a href=&#34;https://lore.kernel.org/all/20260722171159.2776765-1-mic@digikod.net/&#34;&gt;Review Thread&lt;/a&gt;&#xA;| 🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/47&#34;&gt;Bug&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;TODO&lt;/p&gt;&#xA;</description>
      <pubDate>Fri, 21 Aug 2026 07:13:17 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Namespace And Capability Control</title>
      <link>https://wiki.gnoack.org/LandlockNamespaceAndCapabilityControl</link>
      <description>&lt;p&gt;Review: &lt;a href=&#34;https://lore.kernel.org/all/20260726161400.3010511-1-mic@digikod.net/&#34;&gt;https://lore.kernel.org/all/20260726161400.3010511-1-mic@digikod.net/&lt;/a&gt; (Pending)&lt;/p&gt;&#xA;</description>
      <pubDate>Fri, 21 Aug 2026 07:12:18 +0000</pubDate>
    </item>
    <item>
      <title>Landlock System Five Message Queue Control</title>
      <link>https://wiki.gnoack.org/LandlockSystemFiveMessageQueueControl</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;📧 &lt;a href=&#34;https://lore.kernel.org/all/20260727230833.138165-1-utilityemal77@gmail.com/&#34;&gt;Review thread&lt;/a&gt;&#xA;| 🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/30&#34;&gt;Bug&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Idea: &lt;code&gt;LANDLOCK_SCOPE_SYSV_MSG_QUEUE&lt;/code&gt; as a scoped bit restricts the use of SystemV message queues&lt;/p&gt;&#xA;&lt;h2&gt;Notes on the SystemV message queue mechanism&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;msqid&lt;/code&gt; live in a IPC-namespace-wide registry and can be used by any process if the file-like permission bits allow it based on UID and GID&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;code&gt;msqid&lt;/code&gt; is not a file descriptor - any process guessing the right &lt;code&gt;msqid&lt;/code&gt; can try to use it&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;💡 SystemV message queues have a key squatting problem:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Before the queue is created, another process can create a queue with the same key by predicting the key and creating it.  Many programs with fall for it and use that queue, because they create the queue on demand and don&amp;rsquo;t check properly who owns it.&lt;/li&gt;&#xA;&lt;li&gt;Without Landlock, if process permissions are determined purely based on UID and GID, processes can protect against key squatting by using &lt;code&gt;msgctl()&lt;/code&gt; with &lt;code&gt;IPC_STAT&lt;/code&gt; and checking the CUID and CGID in &lt;code&gt;struct ipc_perm&lt;/code&gt; (creator UID and GID)&lt;/li&gt;&#xA;&lt;li&gt;Both the &lt;em&gt;key&lt;/em&gt; and the &lt;em&gt;msqid&lt;/em&gt; can be predicted:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Keys are often static. ftok(3) returns a key that might be guessable as well.&lt;/li&gt;&#xA;&lt;li&gt;Msqids can be listed with a msgctl(2) call or from proc, as implemented in the &lt;code&gt;ipcs&lt;/code&gt; tool.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Overview&lt;/h2&gt;&#xA;&lt;div id=&#39;pikchr-0&#39; class=&#39;pikchr&#39;&gt;&#xA;&lt;div class=&#39;pikchr-svg&#39; style=&#39;max-width:416px&#39;&gt;&#xA;&lt;svg xmlns=&#39;http://www.w3.org/2000/svg&#39; style=&#39;font-size:initial;&#39; viewBox=&#34;0 0 416.045 557.28&#34; data-pikchr-date=&#34;20250319&#34;&gt;&#xA;&lt;path d=&#34;M9.36,148.32L81.36,148.32L81.36,94.32L59.76,72.72L9.36,72.72Z&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;path d=&#34;M59.76,72.72L59.76,94.32L81.36,94.32&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;45.36&#34; y=&#34;100.44&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;file&lt;/text&gt;&#xA;&lt;text x=&#34;45.36&#34; y=&#34;120.6&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;inode&lt;/text&gt;&#xA;&lt;polygon points=&#34;117.36,184.32 105.124,183.032 108.988,175.304&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M45.36,148.32L112.208,181.744&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);stroke-dasharray:7.2,7.2;&#34; /&gt;&#xA;&lt;path d=&#34;M74.16,220.32L160.56,220.32L160.56,184.32L74.16,184.32Z&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;117.36&#34; y=&#34;202.32&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;ftok()&lt;/text&gt;&#xA;&lt;polygon points=&#34;117.36,256.32 113.04,244.8 121.68,244.8&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M117.36,220.32L117.36,250.56&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;path d=&#34;M81.36,310.32L153.36,310.32L153.36,277.92L131.76,256.32L81.36,256.32Z&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;path d=&#34;M131.76,256.32L131.76,277.92L153.36,277.92&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;117.36&#34; y=&#34;283.32&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;key&lt;/text&gt;&#xA;&lt;polygon points=&#34;117.36,346.32 113.04,334.8 121.68,334.8&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M117.36,310.32L117.36,340.56&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;path d=&#34;M74.16,382.32L160.56,382.32L160.56,346.32L74.16,346.32Z&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;117.36&#34; y=&#34;364.32&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;msgget()&lt;/text&gt;&#xA;&lt;polygon points=&#34;117.36,418.32 113.04,406.8 121.68,406.8&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M117.36,382.32L117.36,412.56&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;path d=&#34;M81.36,483.12L153.36,483.12L153.36,439.92L131.76,418.32L81.36,418.32Z&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;path d=&#34;M131.76,418.32L131.76,439.92L153.36,439.92&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;117.36&#34; y=&#34;450.72&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;msqid&lt;/text&gt;&#xA;&lt;polygon points=&#34;45.36,519.12 53.7318,510.104 57.5958,517.832&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M117.36,483.12L50.5119,516.544&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);stroke-dasharray:7.2,7.2;&#34; /&gt;&#xA;&lt;path d=&#34;M2.16,555.12L88.56,555.12L88.56,519.12L2.16,519.12Z&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;45.36&#34; y=&#34;537.12&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;msgsnd()&lt;/text&gt;&#xA;&lt;polygon points=&#34;189.36,519.12 177.124,517.832 180.988,510.104&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M117.36,483.12L184.208,516.544&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);stroke-dasharray:7.2,7.2;&#34; /&gt;&#xA;&lt;path d=&#34;M146.16,555.12L232.56,555.12L232.56,519.12L146.16,519.12Z&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;189.36&#34; y=&#34;537.12&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;msgrcv()&lt;/text&gt;&#xA;&lt;polygon points=&#34;117.36,184.32 125.732,175.304 129.596,183.032&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M122.512,181.744L189.36,148.32&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);stroke-dasharray:7.2,7.2;&#34; /&gt;&#xA;&lt;text x=&#34;189.36&#34; y=&#34;133.2&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;proj_id&lt;/text&gt;&#xA;&lt;text x=&#34;186.48&#34; y=&#34;344.16&#34; text-anchor=&#34;start&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;IPC_EXCL&lt;/text&gt;&#xA;&lt;text x=&#34;186.48&#34; y=&#34;364.32&#34; text-anchor=&#34;start&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;IPC_CREAT&lt;/text&gt;&#xA;&lt;text x=&#34;186.48&#34; y=&#34;384.48&#34; text-anchor=&#34;start&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;mode&lt;/text&gt;&#xA;&lt;polygon points=&#34;153.36,283.32 164.88,279 164.88,287.64&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M159.12,283.32 L 232.56,283.32 Q 261.36,283.32 261.36,254.52 L 261.36,101.52 L 261.36,72.72&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);stroke-dasharray:7.2,7.2;&#34; /&gt;&#xA;&lt;text x=&#34;261.36&#34; y=&#34;37.44&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;or: guess&lt;/text&gt;&#xA;&lt;text x=&#34;261.36&#34; y=&#34;57.6&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;the key&lt;/text&gt;&#xA;&lt;polygon points=&#34;153.36,450.72 164.88,446.4 164.88,455.04&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M159.12,450.72 L 326.16,450.72 Q 354.96,450.72 354.96,421.92 L 354.96,101.52 L 354.96,72.72&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);stroke-dasharray:7.2,7.2;&#34; /&gt;&#xA;&lt;text x=&#34;354.96&#34; y=&#34;17.28&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;or: guess&lt;/text&gt;&#xA;&lt;text x=&#34;354.96&#34; y=&#34;37.44&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;or look up&lt;/text&gt;&#xA;&lt;text x=&#34;354.96&#34; y=&#34;57.6&#34; text-anchor=&#34;middle&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;(MSG_INFO)&lt;/text&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;</description>
      <pubDate>Fri, 21 Aug 2026 07:10:43 +0000</pubDate>
    </item>
    <item>
      <title>Free Bsd Capsicum</title>
      <link>https://wiki.gnoack.org/FreeBsdCapsicum</link>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.cl.cam.ac.uk/research/security/capsicum/&#34;&gt;Capsicum page at the University of Cambridge&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://wiki.freebsd.org/Capsicum&#34;&gt;https://wiki.freebsd.org/Capsicum&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      <pubDate>Fri, 05 Jun 2026 13:17:30 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Scoped Signal Control</title>
      <link>https://wiki.gnoack.org/LandlockScopedSignalControl</link>
      <description>&lt;p&gt;When a thread is in a signal-scoped Landlock domain,&#xA;signal sending is only allowed if:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the recipient Landlock domain is the same or a child domain of the sender Landlock domain, &lt;strong&gt;or&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;if the sender and recipient thread are both part of the same process.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;An overview of Linux signals is in&#xA;&lt;a href=&#34;https://man.gnoack.org/7/signal&#34;&gt;&lt;em&gt;signal&lt;/em&gt;(7)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2&gt;The common case: Signal sending with kill(2)&lt;/h2&gt;&#xA;&lt;p&gt;Normally, signals are sent using the &lt;a href=&#34;https://man.gnoack.org/2/kill&#34;&gt;&lt;em&gt;kill&lt;/em&gt;(2)&lt;/a&gt; system call.&lt;/p&gt;&#xA;&lt;h2&gt;Less common cases&lt;/h2&gt;&#xA;&lt;p&gt;In some weird cases, signals are also sent to processes indirectly through other interactions,&#xA;and for some of these, it is worth asking who the sender thread is.&lt;/p&gt;&#xA;&lt;h3&gt;SIGIO case&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;code&gt;SIGIO&lt;/code&gt; mechanism is a spiritual predecessor of&#xA;&lt;a href=&#34;https://man.gnoack.org/2/select&#34;&gt;&lt;em&gt;select&lt;/em&gt;(2)&lt;/a&gt;,&#xA;&lt;a href=&#34;https://man.gnoack.org/2/poll&#34;&gt;&lt;em&gt;poll&lt;/em&gt;(2)&lt;/a&gt; and&#xA;&lt;a href=&#34;https://man.gnoack.org/7/epoll&#34;&gt;&lt;em&gt;epoll&lt;/em&gt;(7)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote class=&#34;info&#34;&gt;&lt;p&gt;The &lt;code&gt;SIGIO&lt;/code&gt; mechanism has serious drawbacks:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In the signal handler, it is unclear which file descriptor caused the signal.&lt;/li&gt;&#xA;&lt;li&gt;Loose definition of what constitutes a signal-worthy event.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you are looking for a mechanism to get notified on data availability,&#xA;you should look into the other mechanisms instead.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A process can register a signal to happen&#xA;whenever a given file descriptor has an event&#xA;(e.g. data ready for reading).&#xA;This is set up using:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;fcntl(fd, F_SETSIG, SIGIO);    /* decide the signal; default: SIGIO */&#xA;fcntl(fd, F_SETOWN, getpid()); /* decide who gets the signal        */&#xA;fcntl(fd, F_SETFL,  O_ASYNC);  /* turn on signaling                 */&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As additional quirks,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It can also be made to send different signals using &lt;code&gt;F_SETSIG&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;It can be made to signal an entire process group by passing a negative PGID value to &lt;code&gt;F_SETOWN&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The canonical documentation for the &lt;code&gt;SIGIO&lt;/code&gt; mechanism is in&#xA;&lt;a href=&#34;https://man.gnoack.org/2const/F_SETOWN&#34;&gt;&lt;em&gt;F_SETOWN&lt;/em&gt;(2const)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In Landlock&amp;rsquo;s context, &lt;strong&gt;the thread which called &lt;code&gt;F_SETOWN&lt;/code&gt; is the sender of the signal&lt;/strong&gt;&#xA;for the purpose of the Landlock policy enforcement, i.e. when the caller of &lt;code&gt;fcntl(F_SETOWN)&lt;/code&gt; could be sending a signal with &lt;code&gt;kill()&lt;/code&gt; to the same target, the signal will get delivered.&lt;/p&gt;&#xA;&lt;p&gt;In particular, the process which made new file descriptor data available (e.g. by writing into a pipe) is completely irrelevant for this check.&lt;/p&gt;&#xA;</description>
      <pubDate>Fri, 05 Jun 2026 09:49:30 +0000</pubDate>
    </item>
    <item>
      <title>Ukulele Web Syndication</title>
      <link>https://wiki.gnoack.org/UkuleleWebSyndication</link>
      <description>&lt;p&gt;An RSS file (&lt;a href=&#34;/ReallySimpleSyndication&#34;&gt;ReallySimpleSyndication&lt;/a&gt;) for &lt;a href=&#34;/UkuleleWeb&#34;&gt;UkuleleWeb&lt;/a&gt; can be generated with the &lt;code&gt;uku rss&lt;/code&gt; tool.&lt;/p&gt;&#xA;&lt;p&gt;An example invocation is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-good&#34;&gt;uku rss -wiki.title=&amp;quot;My wiki&amp;quot; -wiki.base_url=https://wiki.gnoack.org/ wikidir/*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The output of the tool is the RSS file.&lt;/p&gt;&#xA;&lt;p&gt;You can invoke this in a cron job on your webserver and make it available as a static file.&lt;/p&gt;&#xA;&lt;h2&gt;Controlling included pages&lt;/h2&gt;&#xA;&lt;p&gt;You can control the included pages using either of:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Passing a different list of pages on the command line&lt;/li&gt;&#xA;&lt;li&gt;Passing a &lt;code&gt;-suppress&lt;/code&gt; flag (a marker in markdown files that indicates pages to exclude)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Other flags&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Flag&lt;/th&gt;&#xA;&lt;th&gt;Meaning&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;-feed.max_items&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Maximum number of feed items&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;-feed.suppress&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;If set, suppress pages whose markdown contains this string&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;-wiki.base_url&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;base URL, e.g. &lt;code&gt;https://wiki.gnoack.org/&lt;/code&gt; (required)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;-wiki.title&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;site name (required)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;-wiki.description&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;longer site description&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;</description>
      <pubDate>Tue, 17 Mar 2026 21:24:11 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Domain Is Scoped</title>
      <link>https://wiki.gnoack.org/LandlockDomainIsScoped</link>
      <description>&lt;p&gt;The &lt;code&gt;domain_is_scoped()&lt;/code&gt; helper implements the following predicate:&lt;/p&gt;&#xA;&lt;!-- \forall_{l \in [0,16)} (\mathit{hasbit}(\mathit{self}, l) \implies \mathcal{D}(\mathit{self}, l) = \mathcal{D}(\mathit{other}, l)) --&gt;&#xA;&lt;p&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;∀&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;[&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;6&lt;/mn&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;hasbit&lt;/mi&gt;&lt;/mrow&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;self&lt;/mi&gt;&lt;/mrow&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mspace width=&#34;0.2778em&#34;&gt;&lt;/mspace&gt;&lt;mo stretchy=&#34;false&#34;&gt;⟹&lt;/mo&gt;&lt;mspace width=&#34;0.2778em&#34;&gt;&lt;/mspace&gt;&lt;mi mathvariant=&#34;script&#34;&gt;D&lt;/mi&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;self&lt;/mi&gt;&lt;/mrow&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant=&#34;script&#34;&gt;D&lt;/mi&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;other&lt;/mi&gt;&lt;/mrow&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/math&gt;&lt;/p&gt;&#xA;&lt;p&gt;That is, we require for each layer &lt;em&gt;l&lt;/em&gt; nesting depth that:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;If&lt;/strong&gt; scoping is active at the layer,&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Then&lt;/strong&gt; the domains of &lt;em&gt;self&lt;/em&gt; and &lt;em&gt;other&lt;/em&gt; are the same at the given nesting depth.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;&#xA;math { padding-left: 2em; }&#xA;&lt;/style&gt;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&lt;div id=&#39;pikchr-0&#39; class=&#39;pikchr&#39;&gt;&#xA;&lt;div class=&#39;pikchr-svg&#39; style=&#39;max-width:427px&#39;&gt;&#xA;&lt;svg xmlns=&#39;http://www.w3.org/2000/svg&#39; style=&#39;font-size:initial;&#39; viewBox=&#34;0 0 427.219 254.16&#34; data-pikchr-date=&#34;20250319&#34;&gt;&#xA;&lt;circle cx=&#34;301.853&#34; cy=&#34;12.96&#34; r=&#34;10.8&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;301.853,23.76 306.173,35.28 297.533,35.28&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M301.853,29.52L301.853,41.76&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;circle cx=&#34;301.853&#34; cy=&#34;52.56&#34; r=&#34;10.8&#34;  style=&#34;fill:rgb(211,211,211);stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;301.853,63.36 306.173,74.88 297.533,74.88&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M301.853,69.12L301.853,81.36&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;circle cx=&#34;301.853&#34; cy=&#34;92.16&#34; r=&#34;10.8&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;301.853,102.96 294.373,112.729 289.794,105.402&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M296.968,106.013L273.053,120.96&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;circle cx=&#34;273.053&#34; cy=&#34;131.76&#34; r=&#34;10.8&#34;  style=&#34;fill:rgb(211,211,211);stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;273.053,142.56 277.373,154.08 268.733,154.08&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M273.053,148.32L273.053,160.56&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;circle cx=&#34;273.053&#34; cy=&#34;171.36&#34; r=&#34;10.8&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;273.053,182.16 277.373,193.68 268.733,193.68&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M273.053,187.92L273.053,200.16&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;circle cx=&#34;273.053&#34; cy=&#34;210.96&#34; r=&#34;10.8&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;273.053&#34; y=&#34;236.88&#34; text-anchor=&#34;middle&#34; font-style=&#34;italic&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;client&lt;/text&gt;&#xA;&lt;polygon points=&#34;301.853,102.96 313.911,105.402 309.332,112.729&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M306.737,106.013L330.653,120.96&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;circle cx=&#34;330.653&#34; cy=&#34;131.76&#34; r=&#34;10.8&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;polygon points=&#34;330.653,142.56 334.973,154.08 326.333,154.08&#34; style=&#34;fill:rgb(0,0,0)&#34;/&gt;&#xA;&lt;path d=&#34;M330.653,148.32L330.653,160.56&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;circle cx=&#34;330.653&#34; cy=&#34;171.36&#34; r=&#34;10.8&#34;  style=&#34;fill:none;stroke-width:2.16;stroke:rgb(0,0,0);&#34; /&gt;&#xA;&lt;text x=&#34;330.653&#34; y=&#34;197.28&#34; text-anchor=&#34;middle&#34; font-style=&#34;italic&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;server&lt;/text&gt;&#xA;&lt;text x=&#34;280.253&#34; y=&#34;67.68&#34; text-anchor=&#34;end&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;self and other layer are the same&lt;/text&gt;&#xA;&lt;text x=&#34;251.453&#34; y=&#34;146.88&#34; text-anchor=&#34;end&#34; fill=&#34;rgb(0,0,0)&#34; dominant-baseline=&#34;central&#34;&gt;self and other layer differ&lt;/text&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;</description>
      <pubDate>Sat, 14 Mar 2026 23:05:43 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Tcp Port Control</title>
      <link>https://wiki.gnoack.org/LandlockTcpPortControl</link>
      <description>&lt;p&gt;Landlock can restrict the use of &lt;a href=&#34;https://man7.org/linux/man-pages/man2/connect.2.html&#34;&gt;&lt;em&gt;connect&lt;/em&gt;(2)&lt;/a&gt; and &lt;a href=&#34;https://man7.org/linux/man-pages/man2/bind.2.html&#34;&gt;&lt;em&gt;bind&lt;/em&gt;(2)&lt;/a&gt; with TCP ports.&lt;/p&gt;&#xA;&lt;blockquote class=&#34;info&#34;&gt;&lt;h3&gt;⚠️ &lt;strong&gt;Known issues&lt;/strong&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Multipath-TCP is not covered&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;By creating a Multipath-TCP socket, server processes can side-step the &lt;a href=&#34;https://man7.org/linux/man-pages/man2/bind.2.html&#34;&gt;&lt;em&gt;bind&lt;/em&gt;(2)&lt;/a&gt; restriction&#xA;and still expose a socket which single-path TCP clients can connect to.&#xA;(🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/54&#34;&gt;https://github.com/landlock-lsm/linux/issues/54&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;/LandlockMptcpPortControl&#34;&gt;LandlockMptcpPortControl&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://man7.org/linux/man-pages/man2/listen.2.html&#34;&gt;&lt;em&gt;listen&lt;/em&gt;(2)&lt;/a&gt; without &lt;a href=&#34;https://man7.org/linux/man-pages/man2/bind.2.html&#34;&gt;&lt;em&gt;bind&lt;/em&gt;(2)&lt;/a&gt; also works&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can listen also without doing a &lt;a href=&#34;https://man7.org/linux/man-pages/man2/bind.2.html&#34;&gt;&lt;em&gt;bind&lt;/em&gt;(2)&lt;/a&gt; first.  (The kernel will assign an ephemeral port.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;API&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.kernel.org/userspace-api/landlock.html#c.landlock_ruleset_attr&#34;&gt;&lt;code&gt;struct landlock_ruleset_attr&lt;/code&gt;&lt;/a&gt; is extended by the new field:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-good&#34;&gt;__u64 handled_access_net;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;with &lt;a href=&#34;https://docs.kernel.org/userspace-api/landlock.html#network-flags&#34;&gt;the possible access rights&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;LANDLOCK_ACCESS_NET_BIND_TCP&lt;/code&gt;: Bind a TCP socket to a local port.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;LANDLOCK_ACCESS_NET_CONNECT_TCP&lt;/code&gt;: Connect an active TCP socket to a remote port.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When these are passed during ruleset creation, the use of &lt;a href=&#34;https://man7.org/linux/man-pages/man2/bind.2.html&#34;&gt;&lt;em&gt;bind&lt;/em&gt;(2)&lt;/a&gt; and &lt;a href=&#34;https://man7.org/linux/man-pages/man2/connect.2.html&#34;&gt;&lt;em&gt;connect&lt;/em&gt;(2)&lt;/a&gt; for TCP sockets will be forbidden by default when the ruleset is enforced.&lt;/p&gt;&#xA;&lt;p&gt;To add an exception for a specific TCP port, fill the &lt;a href=&#34;https://docs.kernel.org/userspace-api/landlock.html#c.landlock_net_port_attr&#34;&gt;&lt;code&gt;struct landlock_net_port_attr&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-good&#34;&gt;struct landlock_net_port_attr {&#xA;        __u64 allowed_access;&#xA;        __u64 port;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and add it as an exception to the ruleset using &lt;a href=&#34;https://man.gnoack.org/2/landlock_add_rule&#34;&gt;&lt;em&gt;landlock_add_rule&lt;/em&gt;(2)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-good&#34;&gt;landlock_add_rule(ruleset_fd, LANDLOCK_RULE_NET_PORT, &amp;amp;attr, 0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2&gt;Example&lt;/h2&gt;&#xA;&lt;p&gt;This is partially discussed in the &lt;a href=&#34;/LandlockTcpServerExample&#34;&gt;LandlockTcpServerExample&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
      <pubDate>Tue, 10 Feb 2026 23:35:18 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Unix Connect Control</title>
      <link>https://wiki.gnoack.org/LandlockUnixConnectControl</link>
      <description>&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p style=&#34;float: right;&#34;&gt;✅ in Linux 7.1&lt;/p&gt;&#xA;&lt;p&gt;🐞 &lt;a href=&#34;https://github.com/landlock-lsm/linux/issues/36&#34;&gt;bug #36&lt;/a&gt;&#xA;💾 &lt;a href=&#34;https://github.com/gnoack/linux/commits/fs-connect/&#34;&gt;github&lt;/a&gt;&#xA;📬 &lt;a href=&#34;https://lore.kernel.org/all/20251231213314.2979118-2-utilityemal77@gmail.com/&#34;&gt;old hook patch&lt;/a&gt;&#xA;💾 &lt;a href=&#34;https://lore.kernel.org/all/20260101134102.25938-1-gnoack3000@gmail.com/&#34;&gt;V1&lt;/a&gt;&#xA;&lt;a href=&#34;https://lore.kernel.org/all/20260110143300.71048-2-gnoack3000@gmail.com/&#34;&gt;V2&lt;/a&gt;&#xA;&lt;a href=&#34;https://lore.kernel.org/all/20260119203457.97676-2-gnoack3000@gmail.com/&#34;&gt;V3&lt;/a&gt;&#xA;&lt;a href=&#34;https://lore.kernel.org/all/20260208231017.114343-1-gnoack3000@gmail.com/&#34;&gt;V4&lt;/a&gt;&#xA;&lt;a href=&#34;https://lore.kernel.org/all/20260215105158.28132-1-gnoack3000@gmail.com/&#34;&gt;V5&lt;/a&gt;&#xA;&lt;a href=&#34;https://lore.kernel.org/all/20260315222150.121952-1-gnoack3000@gmail.com/&#34;&gt;V6&lt;/a&gt;&#xA;&lt;a href=&#34;https://lore.kernel.org/all/20260323165654.193957-1-gnoack3000@gmail.com/&#34;&gt;V7&lt;/a&gt;&#xA;&lt;a href=&#34;https://lore.kernel.org/all/20260327164838.38231-1-gnoack3000@gmail.com/&#34;&gt;V8&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;💡 &lt;strong&gt;TL;DR:&lt;/strong&gt; A Landlock control for restricting the &lt;a href=&#34;https://man.gnoack.org/2/connect&#34;&gt;&lt;em&gt;connect&lt;/em&gt;(2)&lt;/a&gt; operation on &lt;a href=&#34;/UnixDomainSockets&#34;&gt;UnixDomainSockets&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Server-side can already be restricted through &lt;code&gt;LANDLOCK_ACCESS_FS_MAKE_SOCK&lt;/code&gt;,&#xA;a filesystem access right which is required to create the socket file.&lt;/p&gt;&#xA;&lt;h2&gt;Overall TODOs&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Review from &lt;a href=&#34;/AppArmor&#34;&gt;AppArmor&lt;/a&gt; folks for hook is still missing (blocked on &lt;a href=&#34;/AppArmor&#34;&gt;AppArmor&lt;/a&gt;)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Georgia Garcia has replied &lt;a href=&#34;https://lore.kernel.org/all/c3fccd822db5fc76b7fab00a9515eb276a71b421.camel@canonical.com/&#34;&gt;📧&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; John Johansen (still pending)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote class=&#34;info&#34;&gt;&lt;p&gt;Work in Progress on 💾 &lt;a href=&#34;https://github.com/gnoack/linux/commits/fs-connect/&#34;&gt;github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;V8 (tag &lt;code&gt;unix-connect-v8&lt;/code&gt;)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; for nicety, revise the order of&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; use the current month as reference point when updating the documentation date&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; fix the m68k GCC 15 bug (hopefully)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;V7 (tag &lt;code&gt;unix-connect-v7&lt;/code&gt;)&lt;/h2&gt;&#xA;&lt;p&gt;Collected TODOs from &lt;a href=&#34;https://lore.kernel.org/all/20260315222150.121952-1-gnoack3000@gmail.com/&#34;&gt;V6 review&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 1/9: Hook needs another revision&#xA;based on &lt;a href=&#34;https://lore.kernel.org/all/CAHC9VhT+scwVSoMNBKgVMnTNdjP_qVSECScmd+i0M3vj-pM-RQ@mail.gmail.com/&#34;&gt;Paul&amp;rsquo;s (revised) feedback&lt;/a&gt;&#xA;and on &lt;a href=&#34;https://lore.kernel.org/all/20260318.giez0eib8Ovu@digikod.net/&#34;&gt;Mickaël&amp;rsquo;s feedback&lt;/a&gt;&#xA;(➡️ Justin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 2/9: Capitalize subject line&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 3/9: What guarantees that the &lt;code&gt;dom_other&lt;/code&gt; stays valid after &lt;code&gt;unix_state_unlock&lt;/code&gt;? (Maybe just keep it a bit longer)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 3/9: Various comments (&lt;a href=&#34;https://lore.kernel.org/all/20260318.peecoo2Ooyep@digikod.net/&#34;&gt;📧&lt;/a&gt;)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; commit msg: explain the &lt;code&gt;u16 access_mask_t&lt;/code&gt; to &lt;code&gt;u32&lt;/code&gt; change&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;del&gt;&lt;strong&gt;Open question:&lt;/strong&gt; What is &lt;code&gt;BUILD_BUG_ON()&lt;/code&gt; good for in &lt;code&gt;domain_is_scoped()&lt;/code&gt;?&lt;/del&gt;&#xA;(Partially postponed for V8, because it&amp;rsquo;s somewhat of an independent concern)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 5/9: Subject line (&lt;code&gt;selftests/landlock&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 6/9: Rename &lt;code&gt;access_fs_16&lt;/code&gt; (in a separate commit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 7/9: Commit message typos&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 9/9: Commit message lacks description&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 9/9: We are missing to handle case 6 in a switch statement?&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; all: Run &lt;code&gt;check-linux.sh&lt;/code&gt;.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It flags that we should use &lt;code&gt;BIT(n)&lt;/code&gt; instead of &lt;code&gt;1 &amp;lt;&amp;lt; n&lt;/code&gt;, but that does not exist in tests.&lt;/li&gt;&#xA;&lt;li&gt;It complains about the Documentation date in the main patch set,&#xA;but that feels like a very minor update.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;V6&lt;/h2&gt;&#xA;&lt;p&gt;Collect TODOs from &lt;a href=&#34;https://lore.kernel.org/all/20260215105158.28132-1-gnoack3000@gmail.com/&#34;&gt;📧 V5 review&lt;/a&gt;&#xA;once the discussion has settled:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; selftests: check path length when populating &lt;code&gt;sun_path&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Docs: squash design decisions update into the main implementation commit and cross-reference it&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; LSM hook: Move LSM hook call below socket type check (V6)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; LSM hook: Mention that hook gets called without any locks held&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Impl: Unify &lt;code&gt;domain_is_scoped&lt;/code&gt; with &lt;code&gt;unmask_scoped_access&lt;/code&gt;? (&lt;a href=&#34;https://lore.kernel.org/all/aZcXSmhZRVcRCvum@google.com/&#34;&gt;📧&lt;/a&gt;)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Decision: Better to not unify&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;PENDING:&lt;/strong&gt; Some open questions about &lt;code&gt;unmask_scoped_access()&lt;/code&gt; logic (&lt;a href=&#34;https://lore.kernel.org/all/20260314.f83f9a697865@gnoack.org/&#34;&gt;📧&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Impl: Locking and &lt;code&gt;SOCK_DEAD&lt;/code&gt; (&lt;a href=&#34;https://lore.kernel.org/all/20260220.82a8adda6f95@gnoack.org/&#34;&gt;📧&lt;/a&gt;)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Decision: Check &lt;code&gt;SOCK_DEAD&lt;/code&gt; and lock using &lt;code&gt;unix_state_lock()&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://lore.kernel.org/all/20260218.ohth8theu8Yi@digikod.net/&#34;&gt;https://lore.kernel.org/all/20260218.ohth8theu8Yi@digikod.net/&lt;/a&gt; (set EUID for coredump test)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://lore.kernel.org/all/20260218.AXoosuwo8aen@digikod.net/&#34;&gt;https://lore.kernel.org/all/20260218.AXoosuwo8aen@digikod.net/&lt;/a&gt; (Inline code in docs)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://lore.kernel.org/all/20260308.zie6thaiP0aj@digikod.net/&#34;&gt;https://lore.kernel.org/all/20260308.zie6thaiP0aj@digikod.net/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Then:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Fix up cover letter and send&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Appropriate locking for accessing &lt;code&gt;other&lt;/code&gt;&amp;rsquo;s creds&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do we have to double check that the socket is not dead (c.f. &lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/net/sock.h#n2116&#34;&gt;&lt;code&gt;sock_orphan()&lt;/code&gt;&lt;/a&gt;)?&lt;/li&gt;&#xA;&lt;li&gt;Locking maybe comparable to &lt;code&gt;sk_user_ns&lt;/code&gt; (&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/net/sock.h#n976&#34;&gt;code&lt;/a&gt;, &lt;a href=&#34;https://elixir.bootlin.com/linux/v6.18.6/A/ident/sk_user_ns&#34;&gt;refs&lt;/a&gt;)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;V5 (&lt;a href=&#34;https://lore.kernel.org/all/20260215105158.28132-1-gnoack3000@gmail.com/&#34;&gt;sent&lt;/a&gt;)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Fix up cover letter&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; test that coredump sockets stay unaffected (&lt;a href=&#34;https://lore.kernel.org/all/20260209.epiCai9phaeF@digikod.net/&#34;&gt;📧&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; follow Tingmao&amp;rsquo;s approach to test the scope (&lt;a href=&#34;https://lore.kernel.org/all/20260209.Noh6thae5cho@digikod.net/&#34;&gt;📧&lt;/a&gt;)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tingmao&amp;rsquo;s patch set: &lt;a href=&#34;https://lore.kernel.org/all/cover.1767115163.git.m@maowtm.org/&#34;&gt;https://lore.kernel.org/all/cover.1767115163.git.m@maowtm.org/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Use Tahera&amp;rsquo;s &lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/testing/selftests/landlock/scoped_base_variants.h&#34;&gt;&lt;code&gt;scoped_base_variants.h&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Does that mean that we can remove the old test? &amp;ndash; &lt;span style=&#34;color: green;&#34;&gt;YES&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Simplify &lt;code&gt;fs_test.c&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Add missing audit test to &lt;code&gt;fs_test.c&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2&gt;Notes&lt;/h2&gt;&#xA;&lt;p&gt;Before sending out patches, remember to run the checks:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;just landlock-check-linux&#xA;git rebase -i --exec &amp;quot;just landlock-check-linux&amp;quot; mic-next&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Sending a new patch version:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git format-patch --cover-letter -v8 --range-diff=unix-connect-v7 base-commit&#xA;just send-email v8-*.patch  # accumulate recipient lists in the configuration&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</description>
      <pubDate>Tue, 10 Feb 2026 22:22:50 +0000</pubDate>
    </item>
    <item>
      <title>Landlock Unix Domain Socket Connect Control</title>
      <link>https://wiki.gnoack.org/LandlockUnixDomainSocketConnectControl</link>
      <description>&lt;p&gt;See &lt;a href=&#34;/LandlockUnixConnectControl&#34;&gt;LandlockUnixConnectControl&lt;/a&gt;&lt;/p&gt;&#xA;</description>
      <pubDate>Tue, 10 Feb 2026 22:19:24 +0000</pubDate>
    </item>
    <item>
      <title>Pocketbook Edu Id Crash</title>
      <link>https://wiki.gnoack.org/PocketbookEduIdCrash</link>
      <description>&lt;blockquote class=&#34;info&#34;&gt;&lt;p&gt;After the latest software upgrade on my Pocketbook Inkpad Color 3, I can not log in to my library through Switch edu-ID any more.&#xA;Posted on the Wiki for reference, in case other people run into the same.&#xA;I reported the bug to both Pocketbook and Switch (2026-01-25).&lt;/p&gt;&#xA;&lt;p&gt;I got an answer from Pocketbook (2026-01-26) confirming that the built-in browser is known to crash after the last software update on the edu-ID page, and that they are working on a solution. There is currently no workaround available.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote class=&#34;info&#34;&gt;&lt;p&gt;You can check for updates at &lt;a href=&#34;https://pocketbook.ch/en-ch/support?model=2256&#34;&gt;https://pocketbook.ch/en-ch/support?model=2256&lt;/a&gt; - firmware should be newer than U743k3.6.10.2854&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Summary and impact&lt;/h2&gt;&#xA;&lt;p&gt;Apps crash when displaying the &amp;ldquo;Switch edu-ID&amp;rdquo; log in form for library&#xA;login (&lt;a href=&#34;https://eduid.ch&#34;&gt;https://eduid.ch&lt;/a&gt;).  This log in system is used across a broad&#xA;network of Swiss universities and libraries.&lt;/p&gt;&#xA;&lt;p&gt;The crash happens from all apps: the Onleihe app, the Libby app and&#xA;the Browser app itself (see the two reproductions below).&lt;/p&gt;&#xA;&lt;h2&gt;System configuration&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Software version: U743k3.6.10.2854 (2026-01-05)&lt;/li&gt;&#xA;&lt;li&gt;Localization: WW&lt;/li&gt;&#xA;&lt;li&gt;Country: Switzerland&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Reproduction (Onleihe app)&lt;/h2&gt;&#xA;&lt;p&gt;The app crashes before you can enter your username.&#xA;(Reproduction is possible without having an account.)&lt;/p&gt;&#xA;&lt;h3&gt;Steps to reproduce:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open Onleihe app&lt;/li&gt;&#xA;&lt;li&gt;Find Library&lt;/li&gt;&#xA;&lt;li&gt;Pick &amp;ldquo;Zürich (Zentralbibliothek Zürich)&amp;rdquo;&#xA;(e-Thek website opens inline)&lt;/li&gt;&#xA;&lt;li&gt;Pick &amp;ldquo;Zentralbibliothek Zürich&amp;rdquo; in library selection form&#xA;(embedded browser redirects to the switch edu ID log in form)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Observed result:&lt;/h3&gt;&#xA;&lt;p&gt;The edu ID log in website starts rendering and shows the logo,&#xA;but then the Onleihe app crashes before it is fully displayed.&lt;/p&gt;&#xA;&lt;h3&gt;Expected result:&lt;/h3&gt;&#xA;&lt;p&gt;Log in form should work.&lt;/p&gt;&#xA;&lt;h2&gt;Reproduction (Browser app)&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Navigate to &lt;a href=&#34;https://eduid.ch/&#34;&gt;https://eduid.ch/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;In menu, pick &amp;ldquo;Sign in&amp;rdquo; (Links to login.eduid.ch)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Result:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Login form starts rendering, but then the browser crashes before it is usable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      <pubDate>Sun, 25 Jan 2026 12:16:22 +0000</pubDate>
    </item>
    <item>
      <title>Fosdem Twenty Six</title>
      <link>https://wiki.gnoack.org/FosdemTwentySix</link>
      <description>&lt;style&gt;&#xA;.infobox {&#xA; border: 1px solid black;&#xA; border-radius: 0;&#xA; box-shadow: 2px 2px 0 black;&#xA; background-color: white;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;blockquote class=&#34;infobox&#34;&gt;&lt;p&gt;FOSDEM 2026 - It is happening&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;🌍 &lt;a href=&#34;https://fosdem.org/2026/&#34;&gt;Website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;⏰ &lt;a href=&#34;https://fosdem.org/2026/schedule/&#34;&gt;Schedule&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;✊ &lt;del&gt;&lt;a href=&#34;https://www.brusselstimes.com/1900206/railway-union-announces-week-long-strike-in-january&#34;&gt;Railway Union accounces strike Jan 26-30&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;📽️ &lt;a href=&#34;https://video.fosdem.org/2026/&#34;&gt;Tentative Video Recordings&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2&gt;Talks&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mickaël Salaün: &lt;a href=&#34;https://fosdem.org/2026/schedule/event/EW8M3R-island/&#34;&gt;Island: Sandboxing tool powered by Landlock&#xA;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Daniel Stenberg: &lt;a href=&#34;https://fosdem.org/2026/schedule/event/B7YKQ7-oss-in-spite-of-ai/&#34;&gt;Open Source Security in spite of AI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      <pubDate>Mon, 12 Jan 2026 19:24:50 +0000</pubDate>
    </item>
  </channel>
</rss>