From mboxrd@z Thu Jan 1 00:00:00 1970 From: walter harms Subject: Re: Documenting sigaltstack SS_AUTODISRM Date: Mon, 30 Oct 2017 11:21:45 +0100 Message-ID: <59F6FD39.40502@bfs.de> References: <08467ae1-7187-3b2a-9a78-8af0c10bf816@list.ru> <3907bc2a-0645-8d93-6ee5-3f99874e7022@gmail.com> <32d95303-5839-9279-a1d3-a06f34e3484e@list.ru> <50de8f3b-8a1e-df50-b5dd-d1b74cb77fad@list.ru> <026308b5-4e92-4439-1eb2-82b67584d548@gmail.com> <3a4f9f3e-fc33-cf98-2322-27087664813f@list.ru> Reply-To: wharms@bfs.de Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: "Michael Kerrisk (man-pages)" Cc: Stas Sergeev , linux-man , Andy Lutomirski , Oleg Nesterov , lkml List-Id: linux-man@vger.kernel.org Am 30.10.2017 11:04, schrieb Michael Kerrisk (man-pages): > [So, things fell on the floor, a while back.] > > On 05/25/2017 11:17 AM, Stas Sergeev wrote: >> 24.05.2017 14:09, Michael Kerrisk (man-pages) пишет: >>> One could do this I suppose, but I read POSIX differently from >>> you and, more importantly, SS_ONSTACK breaks portability on >>> numerous other systems and is a no-op on Linux. So, the Linux man >>> page really should warn against its use in the strongest terms. >> So how about instead of the strongest terms towards >> the code's author, just explain that SS_ONSTACK is a >> bit-value on some/many OSes, and as such, 0 is a >> valid value to enable sas on them, plus all the other >> values would give EINVAL? >> No strongest terms will help w/o an explanation, >> because people will keep looking for something that >> suits as a missing SS_ENABLE. > > Fair enough. I've removed the statement in the manual page > about "confusion". By now the page says: > > BUGS > In the lead up to the release of the Linux 2.4 kernel, a change > was made to allow sigaltstack() to accept SS_ONSTACK in > ss.ss_flags, which results in behavior that is the same as when > ss_flags is 0 (i.e., the inclusion of SS_ONSTACK in ss.ss_flags is > a no-op). On other implementations, and according to POSIX.1, i am confused, i understand that: ss.ss_sp = malloc(SIGSTKSZ); ss.ss_size = SIGSTKSZ; ss.ss_flags = 0; if (sigaltstack(&ss, NULL) == -1) is equivalent to: ss.ss_sp = malloc(SIGSTKSZ); ss.ss_size = SIGSTKSZ; ss.ss_flags = SS_ONSTACK ; if (sigaltstack(&ss, NULL) == -1) but also to ss.ss_sp = malloc(SIGSTKSZ); ss.ss_size = SIGSTKSZ; ss.ss_flags = SS_ONSTACK | SOMETHING_FLAG ; if (sigaltstack(&ss, NULL) == -1) so the use of SS_ONSTACK would result in ss.ss_flags = 0 no matter what. OR SS_ONSTACK is a no-op in Linux re, wh > SS_ONSTACK appears only as a reported flag in old_ss.ss_flags. On > Linux, there is no need ever to specify this flag in ss.ss_flags, > and indeed doing so should be avoided on portability grounds: var‐ > ious other systems give an error if SS_ONSTACK is specified in > ss.ss_flags. > > Cheers, > > Michael >