Help with LANDLOCK_ACCESS_FS_EXECUTE

Andrea Cervesato <[email protected]> Mon, 1 Jul 2024 16:25:53 +0200
Newsgroups dev.linux.lists.landlock
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------PCrgJ8wN8qQXFKpc5lh0fr2s
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi all,

I'm actually writing a test for LANDLOCK_ACCESS_FS_EXECUTE flag in LTP [1].
The test is really simple: it applies the EXECUTE landlock rule inside a 
folder and it verifies that a binary inside it can be executed.
A similar test applies the rule only to the specific binary and check 
again its execution.

But while I was writing the test, I encountered an issue with the 
specific rule setup, since EACCES is raised unexpectedly during binary 
execution.
So I wrote a reproducer, assuming that LTP might be the issue, but it's 
not. The reproducer actually shows that binary can't be executed after 
applying the EXECUTE rule.

I will attach the source code to this email. Can you please tell me if 
there's something wrong with it?

Best regards,
Andrea Cervesato


[1] https://linux-test-project.readthedocs.io/en/latest/

--------------PCrgJ8wN8qQXFKpc5lh0fr2s
Content-Type: text/x-csrc; charset=UTF-8; name="exec-tester.c"
Content-Disposition: attachment; filename="exec-tester.c"
Content-Transfer-Encoding: base64

LyoKICogQ29tcGlsZSB3aXRoOgogKiAgICBnY2MgLWxjIGV4ZWMtdGVzdGVyLmMgLW8gZXhl
Yy10ZXN0ZXIKICoKICogRW5zdXJlIHRoYXQgImxhbmRsb2NrX2V4ZWMiIGlzIHByZXNlbnQg
YW5kIGl0J3MgZXhlY3V0YWJsZSB2aWEgImV4ZWN2ZSIuCiAqIENhbiBiZSBhIGNvbXBpbGVk
IHNvdXJjZSBsaWtlOgogKgogKiAgICBpbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9CiAq
LwoKI2RlZmluZSBfR05VX1NPVVJDRQoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxm
Y250bC5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVk
ZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+
CiNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiNpbmNs
dWRlIDxsaW51eC9sYW5kbG9jay5oPgoKI2RlZmluZSBGSUxFX0VYRUMgImxhbmRsb2NrX2V4
ZWMiCgpzdGF0aWMgaW5saW5lIGludCBsYW5kbG9ja19jcmVhdGVfcnVsZXNldChjb25zdCBz
dHJ1Y3QgbGFuZGxvY2tfcnVsZXNldF9hdHRyICphdHRyLAoJc2l6ZV90IHNpemUsIHVpbnQz
Ml90IGZsYWdzKQp7CglyZXR1cm4gc3lzY2FsbChTWVNfbGFuZGxvY2tfY3JlYXRlX3J1bGVz
ZXQsCgkJYXR0ciwgc2l6ZSwgZmxhZ3MpOwp9CgpzdGF0aWMgaW5saW5lIGludCBsYW5kbG9j
a19hZGRfcnVsZShpbnQgcnVsZXNldF9mZCwgZW51bSBsYW5kbG9ja19ydWxlX3R5cGUgcnVs
ZV90eXBlLAoJY29uc3Qgdm9pZCAqcnVsZV9hdHRyLCB1aW50MzJfdCBmbGFncykKewoJcmV0
dXJuIHN5c2NhbGwoU1lTX2xhbmRsb2NrX2FkZF9ydWxlLAoJCXJ1bGVzZXRfZmQsIHJ1bGVf
dHlwZSwgcnVsZV9hdHRyLCBmbGFncyk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGxhbmRsb2Nr
X3Jlc3RyaWN0X3NlbGYoaW50IHJ1bGVzZXRfZmQsIGludCBmbGFncykKewoJcmV0dXJuIHN5
c2NhbGwoU1lTX2xhbmRsb2NrX3Jlc3RyaWN0X3NlbGYsCgkJcnVsZXNldF9mZCwgZmxhZ3Mp
Owp9CgpzdGF0aWMgdm9pZCBydW5fdGVzdChjb25zdCBpbnQgd2l0aF9sYW5kbG9jaykKewoJ
aW50IHJ2YWw7CglwaWRfdCBwaWQ7CglpbnQgc3RhdHVzOwoJaW50IGZkID0gLTE7CglpbnQg
cnVsZXNldF9mZCA9IC0xOwoKCWlmICh3aXRoX2xhbmRsb2NrKSB7CgkJc3RydWN0IGxhbmRs
b2NrX3J1bGVzZXRfYXR0ciBydWxlc2V0X2F0dHIgPSB7CgkJCS5oYW5kbGVkX2FjY2Vzc19m
cyA9CgkJCQlMQU5ETE9DS19BQ0NFU1NfRlNfRVhFQ1VURSB8CgkJCQlMQU5ETE9DS19BQ0NF
U1NfRlNfV1JJVEVfRklMRSB8CgkJCQlMQU5ETE9DS19BQ0NFU1NfRlNfUkVBRF9GSUxFCgkJ
fTsKCgkJcnVsZXNldF9mZCA9IGxhbmRsb2NrX2NyZWF0ZV9ydWxlc2V0KAoJCQkmcnVsZXNl
dF9hdHRyLCBzaXplb2Yoc3RydWN0IGxhbmRsb2NrX3J1bGVzZXRfYXR0ciksIDApOwoJCWlm
IChydWxlc2V0X2ZkID09IC0xKSB7CgkJCXByaW50ZigibGFuZGxvY2tfY3JlYXRlX3J1bGVz
ZXQoKSBlcnJvciAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKCQkJZ290byBlbmQ7CgkJfQoK
CQlmZCA9IG9wZW4oRklMRV9FWEVDLCBPX1BBVEggfCBPX0NMT0VYRUMsIDA3NDQpOwoJCWlm
IChmZCA9PSAtMSkgewoJCQlwcmludGYoIkNhbid0IG9wZW4gZmlsZSAnJXMnXG4iLCBGSUxF
X0VYRUMpOwoJCQlnb3RvIGVuZDsKCQl9CgoJCXN0cnVjdCBsYW5kbG9ja19wYXRoX2JlbmVh
dGhfYXR0ciBwYXRoX2JlbmVhdGhfYXR0ciA9IHsKCQkJLmFsbG93ZWRfYWNjZXNzID0gTEFO
RExPQ0tfQUNDRVNTX0ZTX0VYRUNVVEUsCgkJCS5wYXJlbnRfZmQgPSBmZCwKCQl9OwoKCQly
dmFsID0gbGFuZGxvY2tfYWRkX3J1bGUoCgkJCXJ1bGVzZXRfZmQsCgkJCUxBTkRMT0NLX1JV
TEVfUEFUSF9CRU5FQVRILAoJCQkmcGF0aF9iZW5lYXRoX2F0dHIsCgkJCTApOwoJCWlmIChy
dmFsID09IC0xKSB7CgkJCXByaW50ZigibGFuZGxvY2tfYWRkX3J1bGUgZXJyb3I6ICVzXG4i
LCBzdHJlcnJvcihlcnJubykpOwoJCQlnb3RvIGVuZDsKCQl9CgoJCXJ2YWwgPSBwcmN0bChQ
Ul9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAwLCAwKTsKCQlpZiAocnZhbCA9PSAtMSkgewoJ
CQlwcmludGYoInByY3RsIGVycm9yXG4iKTsKCQkJZ290byBlbmQ7CgkJfQoKCQlydmFsID0g
bGFuZGxvY2tfcmVzdHJpY3Rfc2VsZihydWxlc2V0X2ZkLCAwKTsKCQlpZiAocnZhbCA9PSAt
MSkgewoJCQlwcmludGYoImxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYgZXJyb3I6ICVzXG4iLCBz
dHJlcnJvcihlcnJubykpOwoJCQlnb3RvIGVuZDsKCQl9Cgl9CgoJcGlkID0gZm9yaygpOwoJ
aWYgKHBpZCA9PSAtMSkgewoJCXByaW50ZigiZXhlY3ZlKCkgZXJyb3I6ICVzXG4iLCBzdHJl
cnJvcihlcnJubykpOwoJCWdvdG8gZW5kOwoJfQoKCWlmICghcGlkKSB7CgkJY2hhciAqYXJn
c1tdID0geyhjaGFyICopRklMRV9FWEVDLCBOVUxMfTsKCgkJcnZhbCA9IGV4ZWN2ZShGSUxF
X0VYRUMsIGFyZ3MsIE5VTEwpOwoJCWlmIChydmFsID09IC0xKQoJCQlwcmludGYoIkZhaWxl
ZCB0byBleGVjdXRlIHRlc3QgYmluYXJ5OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKCgkJ
X2V4aXQoMSk7Cgl9CgoJd2FpdHBpZChwaWQsICZzdGF0dXMsIDApOwoJaWYgKCFXSUZFWElU
RUQoc3RhdHVzKSB8fCBXRVhJVFNUQVRVUyhzdGF0dXMpICE9IDApCgkJZ290byBlbmQ7CgoJ
cHJpbnRmKCJCaW5hcnkgZXhlY3V0ZWRcbiIpOwoKZW5kOgoJaWYgKHJ1bGVzZXRfZmQgIT0g
LTEpCgkJY2xvc2UocnVsZXNldF9mZCk7CgoJaWYgKGZkICE9IC0xKQoJCWNsb3NlKGZkKTsK
fQoKaW50IG1haW4odm9pZCkKewoJcHJpbnRmKCJcblRlc3RpbmcgTEFORExPQ0tfQUNDRVNT
X0ZTX0VYRUNVVEUgZnVuY3Rpb25hbGl0eVxuXG4iKTsKCXByaW50ZigiLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CglwcmludGYoIlx0UnVubmluZyB0
ZXN0IHdpdGhvdXQgbGFuZGxvY2tcbiIpOwoJcHJpbnRmKCJcdCIpOwoJcnVuX3Rlc3QoMCk7
CglwcmludGYoIlxuIik7CgoJcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iKTsKCXByaW50ZigiXHRSdW5uaW5nIHRlc3Qgd2l0aCBsYW5kbG9j
ayBhY3RpdmF0ZWRcbiIpOwoJcHJpbnRmKCJcdCIpOwoJcnVuX3Rlc3QoMSk7CglwcmludGYo
IlxuIik7CgoJcmV0dXJuIDA7Cn0K

--------------PCrgJ8wN8qQXFKpc5lh0fr2s--