[Bug 276043] md5(1) et al are broken when reading the last argument because of capsicum(4) code

From: <bugzilla-noreply_at_freebsd.org>
Date: Tue, 02 Jan 2024 21:46:28 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276043

Ricardo Branco <rbranco@suse.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|fread(3) is truncated when  |md5(1) et al are broken
                   |reading from                |when reading the last
                   |pseudo-filesystems          |argument because of
                   |                            |capsicum(4) code

--- Comment #2 from Ricardo Branco <rbranco@suse.com> ---
I figured out the problematic code at:

```
                        /*
                         * XXX Enter capability mode on the last argv file.
                         * When a casper file service or other approach is
                         * available, switch to that and enter capability mode
                         * earlier.
                         */
                        if (*(argv + 1) == NULL) {
#ifdef HAVE_CAPSICUM
                                cap_rights_init(&rights, CAP_READ, CAP_FSTAT);
                                if (caph_rights_limit(fileno(f), &rights) < 0
||
                                    caph_enter() < 0)
                                        err(1, "capsicum");
#endif
                        }
```

So md5 works if I pass /dev/null as the last argument:

$ md5 /compat/linux/proc/cpuinfo
MD5 (/compat/linux/proc/cpuinfo) = 36966b53dc9e57113b2b7637d8b51720
$ md5 /compat/linux/proc/cpuinfo /dev/null
MD5 (/compat/linux/proc/cpuinfo) = 142e18c701aa58b0e691920e2bf98e56
MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e

-- 
You are receiving this mail because:
You are the assignee for the bug.