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



Reply via email to