Waldek,
I'm well out of my depth here, but I've run across
https://outflux.net/blog/archives/2021/02/08/security-things-in-linux-v5-8/
which says that READ_IMPLIES_EXEC "is no more" in kernel 5.8. Assuming
it is true, that will stop your patch to c_core.c having its intended
effect.
Looking at c_core.c, where a comment says that if changing the
personality failed, "we might as well continue", it appears that the
logic of the code leads to the infinite loop that I experience.
Steve
On Fri, 7 May 2021, hebisch-at-math.uni.wroc.pl |pop-forum| wrote:
This email was sent to you by someone outside the University.
You should only click on links or attachments if you are certain that the email
is genuine and the content is safe.
On Fri, May 07, 2021 at 02:01:11PM -0400, [email protected] wrote:
I don't know a way to rebuild on a machine that has no working version of
pop11 at all, which is the position on my Ubuntu LTS with kernel 5.8.
If you have good build tree (with .o files) then running 'mklibpop' in
pop/extern/lib and then 'poplink_cmnd' in pop/pop with proper environment
(say via 'poplog.sh' script) should do.
So I tried rebuilding, with the patch, on Scientific Linux 7. C programs
that I compile myself on the Scientic Linux machine run on the Ubuntu one
when all relevant libraries are present.
On SL, I get a new basepop11 which works as expected there. When I transfer
the new basepop11 to Ubuntu and try to run it, it loops, using 100% of cpu,
and never gives a system prompt. If I run it under gdb, I get an infinite
succession of lines
process 733915 is executing new program: /home/steve/basepop11
all with the same process number.
It's not a matter of total incompatibility between SL and Ubuntu, because I
also have access to an Ubuntu LTS system that is still on kernel 5.4, and
the new basepop11 is ok there. Any suggestions for what to do differently
or tests I should run?
Could you try strace? Running
./poplog.sh strace -o p_trace pop11
gives me pop11 prompt. When I exit from poplog there is log of
system calls in p_trace. What matters are lines around personality.
In my case I see:
personality(0xffffffff /* PER_??? */) = 4194304
personality(0x440000 /* PER_??? */) = 4194304
personality(0xffffffff /* PER_??? */) = 4456448
readlink("/proc/self/exe", "/mnt/lv3/kompi0/poplog/pp6.pp3y/"..., 4096) = 45
execve("/mnt/lv3/kompi0/poplog/pp6.pp3y/pop/pop/pop11", ["pop11"], [/* 71 vars
*/]) = 0
and later
personality(0xffffffff /* PER_??? */) = 4456448
The calls with 0xffffffff as argument ask for current personality, we
need last value which in hex is 0x440000. On my system default is
0x400000 (decimal 4194304).
--
Waldek Hebisch