]> git.ipfire.org Git - thirdparty/man-pages.git/log
thirdparty/man-pages.git
20 years agoConsistent use of terms "open file description",
Michael Kerrisk [Wed, 22 Jun 2005 09:53:58 +0000 (09:53 +0000)] 
Consistent use of terms "open file description",
"file status flags", and "file decriptor flags"
Some rewriting of discussion of file descriptor flags
Under F_DUPFD, replaced some text duplicated in dup.2 with a cross ref to dup.2
Minor wording and formatting fixes

20 years agoConsistent use of terms "open file description",
Michael Kerrisk [Wed, 22 Jun 2005 09:53:00 +0000 (09:53 +0000)] 
Consistent use of terms "open file description",
"file status flags", and "file decriptor flags"
Removed mention of lock sharing -- it was not accurate.
Minor formatting fixes

20 years agoClarification of term "open file description" along with
Michael Kerrisk [Wed, 22 Jun 2005 09:52:33 +0000 (09:52 +0000)] 
Clarification of term "open file description" along with
explanation of what information it maintains.
Various minor wording changes

20 years agoFormatting changes
Michael Kerrisk [Wed, 22 Jun 2005 08:16:22 +0000 (08:16 +0000)] 
Formatting changes

20 years agoMinor fixes
Michael Kerrisk [Wed, 22 Jun 2005 07:19:03 +0000 (07:19 +0000)] 
Minor fixes

20 years agoMinor wording changes (after email with AEB).
Michael Kerrisk [Wed, 22 Jun 2005 06:52:22 +0000 (06:52 +0000)] 
Minor wording changes (after email with AEB).

20 years agoAdded ERANGE error
Michael Kerrisk [Tue, 21 Jun 2005 16:03:30 +0000 (16:03 +0000)] 
Added ERANGE error

20 years agoInitial setup for 2.05 release
Michael Kerrisk [Tue, 21 Jun 2005 15:08:47 +0000 (15:08 +0000)] 
Initial setup for 2.05 release

20 years agoInitial setup for 2.05 release
Michael Kerrisk [Tue, 21 Jun 2005 15:07:59 +0000 (15:07 +0000)] 
Initial setup for 2.05 release

20 years agoFor 2.04 release man-pages-2.04
Michael Kerrisk [Tue, 21 Jun 2005 14:56:41 +0000 (14:56 +0000)] 
For 2.04 release

20 years agoGetting ready for 2.04 release
Michael Kerrisk [Tue, 21 Jun 2005 14:47:55 +0000 (14:47 +0000)] 
Getting ready for 2.04 release

20 years agoFurther tcp_stdurg and SIOCATMARK work; minor formatting fixes
Michael Kerrisk [Tue, 21 Jun 2005 14:46:08 +0000 (14:46 +0000)] 
Further tcp_stdurg and SIOCATMARK work; minor formatting fixes

20 years agoMinor formatting fixes
Michael Kerrisk [Tue, 21 Jun 2005 14:45:03 +0000 (14:45 +0000)] 
Minor formatting fixes

20 years agoFixed descriptotion of header file reqmts in prototype,
Michael Kerrisk [Tue, 21 Jun 2005 14:44:34 +0000 (14:44 +0000)] 
Fixed descriptotion of header file reqmts in prototype,

20 years agoClarified semantics of relationship between flock() locks
Michael Kerrisk [Tue, 21 Jun 2005 14:43:56 +0000 (14:43 +0000)] 
Clarified semantics of relationship between flock() locks
and open file entries and file descriptors.
See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=291121

20 years agoMinor changes
Michael Kerrisk [Tue, 21 Jun 2005 13:50:30 +0000 (13:50 +0000)] 
Minor changes

20 years agoFix description of return value.
Michael Kerrisk [Tue, 21 Jun 2005 13:47:59 +0000 (13:47 +0000)] 
Fix description of return value.

20 years agoAdd log1p(3) to SEE ALSO.
Michael Kerrisk [Tue, 21 Jun 2005 13:00:02 +0000 (13:00 +0000)] 
Add log1p(3) to SEE ALSO.
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=309578

20 years agoFix typo: "_SC_2_DEV" should be "_SC_2_C_DEV"
Michael Kerrisk [Tue, 21 Jun 2005 11:30:37 +0000 (11:30 +0000)] 
Fix typo: "_SC_2_DEV" should be "_SC_2_C_DEV"

20 years agoWhen specifying resolved_path as NULL, realpath()
Michael Kerrisk [Tue, 21 Jun 2005 11:20:42 +0000 (11:20 +0000)] 
When specifying resolved_path as NULL, realpath()
will (still) only allocate up to PATH_MAX bytes.
Plus other minor changes.
See also http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=239424

20 years agoO_DIRECT needs _GNU_SOURCE.
Michael Kerrisk [Tue, 21 Jun 2005 10:04:56 +0000 (10:04 +0000)] 
O_DIRECT needs _GNU_SOURCE.
O_ASYNC works for pipes and FIFOs in Linux 2.6
Vaious minor fixes

20 years agohttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=194842
Michael Kerrisk [Tue, 21 Jun 2005 09:22:02 +0000 (09:22 +0000)] 
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=194842

Because RAND_MAX is equal to INT_MAX, the following expression
contained in the manpage for rand(3) is slightly incorrect.
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

The correct expression should use parentheses to group the division
before the multiplication, thus yielding:
j=1+(int) (10.0*(rand()/(RAND_MAX+1.0)));

This is not an error where 10.0 is a floating point number, however
where 10.0 is replaced with an integer, this will cause the expression
to always evaluate to 1. (The addition of two parentheses would make
this bug a lot more difficult to make.)

20 years agoSee http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=118752
Michael Kerrisk [Tue, 21 Jun 2005 08:55:14 +0000 (08:55 +0000)] 
See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=118752

20 years agoMinor formatting change
Michael Kerrisk [Tue, 21 Jun 2005 08:32:40 +0000 (08:32 +0000)] 
Minor formatting change

20 years agoMinor changes
Michael Kerrisk [Tue, 21 Jun 2005 08:30:41 +0000 (08:30 +0000)] 
Minor changes

20 years agoMore tcp_stdurg and SIOCATMARK work
Michael Kerrisk [Mon, 20 Jun 2005 14:45:09 +0000 (14:45 +0000)] 
More tcp_stdurg and SIOCATMARK work

20 years agoSince Linux 2.6, the ru_nvcsw and ru_nivcsw fields are used.
Michael Kerrisk [Mon, 20 Jun 2005 08:58:09 +0000 (08:58 +0000)] 
Since Linux 2.6, the ru_nvcsw and ru_nivcsw fields are used.

20 years agoChanged (char *) to (void *) in example.
Michael Kerrisk [Fri, 17 Jun 2005 13:34:00 +0000 (13:34 +0000)] 
Changed (char *) to (void *) in example.
See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=313607

20 years agoArg for %p is a pointer to _a pointer to_ void.
Michael Kerrisk [Fri, 17 Jun 2005 13:06:58 +0000 (13:06 +0000)] 
Arg for %p is a pointer to _a pointer to_ void.
As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=263109

20 years agoBUGS: In kernels < 2.6.9, EPOLL_CTL_DEL required a non-NULL
Michael Kerrisk [Fri, 17 Jun 2005 11:33:07 +0000 (11:33 +0000)] 
BUGS: In kernels < 2.6.9, EPOLL_CTL_DEL required a non-NULL
'event', even though this argument is ignored.
As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=306517.

20 years agofreopen(3) can change file descriptor associations of stin/stdout/stderr
Michael Kerrisk [Thu, 16 Jun 2005 16:10:05 +0000 (16:10 +0000)] 
freopen(3) can change file descriptor associations of stin/stdout/stderr

20 years agostrerror_r(3) requires #define _XOPEN_SOURCE 600
Michael Kerrisk [Thu, 16 Jun 2005 16:09:25 +0000 (16:09 +0000)] 
strerror_r(3) requires #define _XOPEN_SOURCE 600

20 years agoRewrote description of return value.
Michael Kerrisk [Thu, 16 Jun 2005 15:07:57 +0000 (15:07 +0000)] 
Rewrote description of return value.
As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=296183

20 years agoRemoved erroneous description of makecontext() return value.
Michael Kerrisk [Thu, 16 Jun 2005 14:37:57 +0000 (14:37 +0000)] 
Removed erroneous description of makecontext() return value.
As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=311800

20 years agoremoved fixed FIXMEs
Michael Kerrisk [Thu, 16 Jun 2005 10:35:03 +0000 (10:35 +0000)] 
removed fixed FIXMEs

20 years agoformatting
Michael Kerrisk [Thu, 16 Jun 2005 10:32:30 +0000 (10:32 +0000)] 
formatting

20 years agoMore SIOCATMARK cahnges.
Michael Kerrisk [Thu, 16 Jun 2005 10:23:59 +0000 (10:23 +0000)] 
More SIOCATMARK cahnges.

20 years agoglobal edit s/ -1/ \\-1/g
Michael Kerrisk [Wed, 15 Jun 2005 14:10:23 +0000 (14:10 +0000)] 
global edit s/ -1/ \\-1/g

20 years agoGlobal edit: s/nonzero/non-zero/
Michael Kerrisk [Wed, 15 Jun 2005 13:32:34 +0000 (13:32 +0000)] 
Global edit: s/nonzero/non-zero/

20 years agoVarious wording and foratting fixes
Michael Kerrisk [Wed, 15 Jun 2005 13:26:36 +0000 (13:26 +0000)] 
Various wording and foratting fixes

20 years agoVarious wording and formatting fixes.
Michael Kerrisk [Wed, 15 Jun 2005 12:56:21 +0000 (12:56 +0000)] 
Various wording and formatting fixes.
Incorporated some new /proc/sys/net/ipv4/tcp_* file descriptions
from the 2.6.12 source file Documentation/networking/ip-sysctl.txt.

20 years agoAdded pointer to ip(7) and proc(7) for /proc/sys/net
Michael Kerrisk [Wed, 15 Jun 2005 12:07:30 +0000 (12:07 +0000)] 
Added pointer to ip(7) and proc(7) for /proc/sys/net

20 years agoRLIMIT_RSS only has affect "in 2.4.x", not "in 2.4 and later".
Michael Kerrisk [Wed, 15 Jun 2005 11:35:49 +0000 (11:35 +0000)] 
RLIMIT_RSS only has affect "in 2.4.x", not "in 2.4 and later".

20 years agoAdded FIXME for mqueue files
Michael Kerrisk [Wed, 15 Jun 2005 08:30:11 +0000 (08:30 +0000)] 
Added FIXME for mqueue files

20 years agoFixes in discussion of SIOCATMARK + general wording and formatting
Michael Kerrisk [Tue, 14 Jun 2005 15:24:55 +0000 (15:24 +0000)] 
Fixes in discussion of SIOCATMARK + general wording and formatting
clean-ups.

20 years agoVarious minor changes
Michael Kerrisk [Tue, 14 Jun 2005 11:25:12 +0000 (11:25 +0000)] 
Various minor changes

20 years agoWording improvements
Michael Kerrisk [Tue, 14 Jun 2005 11:22:23 +0000 (11:22 +0000)] 
Wording improvements

20 years agoWording improvements
Michael Kerrisk [Tue, 14 Jun 2005 11:22:06 +0000 (11:22 +0000)] 
Wording improvements

20 years agoVarious minor changes
Michael Kerrisk [Tue, 14 Jun 2005 11:20:57 +0000 (11:20 +0000)] 
Various minor changes

20 years agoSmall wording fix.
Michael Kerrisk [Mon, 13 Jun 2005 09:51:27 +0000 (09:51 +0000)] 
Small wording fix.

20 years agoSalut Olivier (and Nishanth),
Michael Kerrisk [Mon, 13 Jun 2005 09:01:49 +0000 (09:01 +0000)] 
Salut Olivier (and Nishanth),

Regarding man page documentation of the problem of short sleeps
for setiteimer(2)...

> > -- pointers to those threads
>
> http://bugzilla.kernel.org/show_bug.cgi?id=4569
> http://lkml.org/lkml/2005/4/29/163
>
> > -- indications of which kernel versions show this bahaviour
>
> AFAIK, all versions as far as x86 is concerned.
> Dunno if it is hardware specific.
>
> > -- a (short) test program to demonstrate it, if you have one.
>
> See the bugzilla bug's attachments

Sorry for the long delay in following this up, but I've got to
it now.  I tweaked your suggestions slightly:

{{
Timers will never expire before the requested time,
-instead expiring some short, constant time afterwards, dependent
-on the system timer resolution (currently 10ms).
+but may expire some (short) time afterwards, which depends
+on the system timer resolution and on the system load.
+Upon expiration, a signal will be generated and the timer reset.
+If the timer expires while the process is active (always true for

+On certain systems (including x86), the Linux kernel has a bug which will
+produce premature timer expirations of up to one jiffy under some
+circumstances.
}}

Thanks for this bug reporet,

Nishanth: if and when your changes are accepted, and the problem
is thus fixed, could you please send me a notification of that
fact, and I can then further amend the manual pages.

Cheers,

Michael

/* itimer_short_interval_bug.c

   June 2005

   In current Linux kernels, an interval timer set using setitimer()
   can sometimes sleep *less* than the specified interval.
   This program demonstrates the behaviour by looping through all
   itimer values from 1 microsecond upwards, in one microsecond steps.
*/
/* Adapted from a program by Olivier Croquette, June 2005 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/wait.h>

typedef unsigned long long int u_time_t; /* in microsecs */

static int handler_flag;

/* return time as a number of microsecs  */

static u_time_t
gettime(void )
{
    struct timeval tv;

    if ( gettimeofday(&tv, NULL) == -1) {
        perror("gettimeofday()");
        return 0;
    }
    return (tv.tv_usec + tv.tv_sec * 1000000LL);
}

static void
handler (int sig, siginfo_t *siginfo, void *context)
{
    handler_flag++;
    return ;
}

/* Sleep for 'time' microsecs. */
static int
isleep(u_time_t time)
{
    struct itimerval  newtv;
    sigset_t sigset;
    struct sigaction  sigact;

    if (time == 0)
        return 0;

    /* block SIGALRM */
    sigemptyset (&sigset);
    sigaddset (&sigset, SIGALRM);
    sigprocmask (SIG_BLOCK, &sigset, NULL);

    /* set up our handler */
    sigact.sa_sigaction  = handler;
    sigemptyset(&sigact.sa_mask);
    sigact.sa_flags = SA_SIGINFO;
    sigaction (SIGALRM, &sigact, NULL);

    newtv.it_interval.tv_sec  = 0;
    newtv.it_interval.tv_usec = 0;
    newtv.it_value.tv_sec     = time / 1000000;
    newtv.it_value.tv_usec    = time % 1000000;
    if (setitimer(ITIMER_REAL,&newtv,NULL) == -1) {
        perror("setitimer(set)");
        return 1;
    }

    sigemptyset (&sigset);
    sigsuspend (&sigset);
    return 0;
}

int
main(int argc, char *argv[]) {
    u_time_t wait;
    int loop, numLoops;
    u_time_t t1, t2;
    u_time_t actual;
    long long minDiff, maxDiff, totDiff, diff;
    int numFail = 0;

    if (argc != 2) {
fprintf(stderr, "Usage: %s num-loops\n", argv[0]);
exit(EXIT_FAILURE);
    } /* if */

    numLoops = atoi(argv[1]);
    setbuf(stdout, NULL);

    for (wait = 1; ; wait++) {
maxDiff = 0;
numFail = 0;
totDiff = 0;
minDiff = -wait;

        if (wait % 10000 == 0)
    printf("%llu\n", wait);

for (loop = 0; loop < numLoops; loop++) {
            t1 = gettime();

            handler_flag = 0;
            isleep(wait);

    if ( handler_flag != 1 )
                printf("Problem with the handler flag (%d)!\n", handler_flag);

            t2 = gettime();
            actual = t2 - t1;
            if ( actual < wait ) {
        diff = actual - wait;
if (diff < maxDiff)
    maxDiff = diff;
if (diff > minDiff)
    minDiff = diff;
totDiff += diff;
numFail++;
    } /* if */

        } /* for */
if (numFail > 0)
            printf("%llu: %3d fail (%4lld %4lld; avg=%6.1f)\n",
    wait, numFail, minDiff, maxDiff,
    (double) totDiff / numFail);
    } /* for */

    return 0;
} /* main */

20 years agoRemove duplicated CLONE_VFORK text
Michael Kerrisk [Mon, 13 Jun 2005 06:09:43 +0000 (06:09 +0000)] 
Remove duplicated CLONE_VFORK text

20 years agoFormatting fix
Michael Kerrisk [Thu, 9 Jun 2005 07:12:30 +0000 (07:12 +0000)] 
Formatting fix

20 years agoUpdates
Michael Kerrisk [Wed, 8 Jun 2005 13:27:32 +0000 (13:27 +0000)] 
Updates

20 years agoFix discussion of alternate signals stack
Michael Kerrisk [Wed, 8 Jun 2005 13:27:21 +0000 (13:27 +0000)] 
Fix discussion of alternate signals stack

20 years agoNew pthreads.7 page
Michael Kerrisk [Tue, 7 Jun 2005 12:35:32 +0000 (12:35 +0000)] 
New pthreads.7 page

20 years agoMinor fix
Michael Kerrisk [Tue, 7 Jun 2005 06:51:12 +0000 (06:51 +0000)] 
Minor fix

20 years agoFormatting fix
Michael Kerrisk [Fri, 3 Jun 2005 11:14:19 +0000 (11:14 +0000)] 
Formatting fix

20 years agoInitial set-up for 2.04 release
Michael Kerrisk [Thu, 2 Jun 2005 13:28:50 +0000 (13:28 +0000)] 
Initial set-up for 2.04 release

20 years ago2.03 release man-pages-2.03
Michael Kerrisk [Thu, 2 Jun 2005 13:11:04 +0000 (13:11 +0000)] 
2.03 release

20 years ago2.03 release
Michael Kerrisk [Thu, 2 Jun 2005 13:10:44 +0000 (13:10 +0000)] 
2.03 release

20 years agoUpdated copyright date
Michael Kerrisk [Thu, 2 Jun 2005 12:52:15 +0000 (12:52 +0000)] 
Updated copyright date

20 years agoNoted that any thread in a thread group can wait for a child
Michael Kerrisk [Thu, 2 Jun 2005 10:22:34 +0000 (10:22 +0000)] 
Noted that any thread in a thread group can wait for a child
that one of them creates using fork().

20 years agoFix typo
Michael Kerrisk [Tue, 31 May 2005 16:08:45 +0000 (16:08 +0000)] 
Fix typo

20 years agoHi Andries,
Michael Kerrisk [Tue, 31 May 2005 16:07:24 +0000 (16:07 +0000)] 
Hi Andries,

> The question came up whether execve of a suid binary while being ptraced
> would fail or ignore the suid part. The answer today seems to be the
> latter:
>
> E.g. (in 2.6.11) security/dummy.c:
>
> static void dummy_bprm_apply_creds (struct linux_binprm *bprm, int
> unsafe)
> {
>         if (bprm->e_uid != current->uid || bprm->e_gid != current->gid) {
>                 if ((unsafe & ~LSM_UNSAFE_PTRACE_CAP) &&
> !capable(CAP_SETUID)) {
>                         bprm->e_uid = current->uid;
>                         bprm->e_gid = current->gid;
>                 }
>         }
> }
>
> and fs/exec.c:
>
> void compute_creds(struct linux_binprm *bprm) {
>         int unsafe;
>
>         unsafe = unsafe_exec(current);
>         security_bprm_apply_creds(bprm, unsafe);
> }
>
> static inline int unsafe_exec(struct task_struct *p) {
>         int unsafe = 0;
>         if (p->ptrace & PT_PTRACED) {
>                 if (p->ptrace & PT_PTRACE_CAP)
>                         unsafe |= LSM_UNSAFE_PTRACE_CAP;
>                 else
>                         unsafe |= LSM_UNSAFE_PTRACE;
>         }
>         return unsafe;
> }
>
> That is: if the process that calls execve() is being traced,
> the LSM_UNSAFE_PTRACE bit is et in unsafe and security_bprm_apply_creds()
> will make sure the suid/sgid bits are ignored.
>
> ---
>
> In my man page I do not read anything like that. It says
>
>  EPERM  The process is being traced, the user is not the  superuser and
>         the file has an SUID or SGID bit set.
> and
>
>  If  the current program is being ptraced, a SIGTRAP is sent to it after
>  a successful execve().
>
>  If the set-uid bit is set on the program file pointed  to  by filename
>  the  effective user ID of the calling process is changed to that of the
>  owner of the program file.
>
> So, maybe this sentence should be amended to read
>
>  If the set-uid bit is set on the program file pointed  to  by filename
>  and the current process is not being ptraced, the  effective user ID
>  of the calling process is changed to ...

I changed your "current" to "calling" (to be consistent with the
rest of the page), but otherwise applied as you suggest.

The revision will appear in man-pages-2.03, which I can release
any time now.  Are you avialable to do an upload tomorrow?

20 years agoSEE ALSO s/threads/pthreads
Michael Kerrisk [Mon, 30 May 2005 16:47:35 +0000 (16:47 +0000)] 
SEE ALSO s/threads/pthreads

20 years agonswap - not maintained.
Michael Kerrisk [Mon, 30 May 2005 16:44:20 +0000 (16:44 +0000)] 
nswap - not maintained.

20 years agoFIXME: CAP_AUDIT_CONTROL and CAP_AUDIT_WRITE are not yet documented
Michael Kerrisk [Mon, 30 May 2005 16:43:37 +0000 (16:43 +0000)] 
FIXME: CAP_AUDIT_CONTROL and CAP_AUDIT_WRITE are not yet documented

20 years agoNoted changes in permissions required for SHM_LOCK/SHM_UNLOCK.
Michael Kerrisk [Mon, 30 May 2005 11:58:06 +0000 (11:58 +0000)] 
Noted changes in permissions required for SHM_LOCK/SHM_UNLOCK.

20 years ago1,$s/inherited/inheritable/g
Michael Kerrisk [Mon, 30 May 2005 09:56:32 +0000 (09:56 +0000)] 
1,$s/inherited/inheritable/g

20 years agoNoted F_SETOWN bug for socket file descriptor in Linux 2.4 and earlier.
Michael Kerrisk [Fri, 20 May 2005 12:11:25 +0000 (12:11 +0000)] 
Noted F_SETOWN bug for socket file descriptor in Linux 2.4 and earlier.
Added text on permissions required to send signal to owner.

====

Hello Johannes,

> Betreff: Inaccuracy of fcntl man page
> Datum: Mon, 2 May 2005 20:07:12 +0200

Thanks for yor note.

Sorry for the delay in getting back to you.  I needed to find time
to set aside to look at the details.  Now I've finally got there.

> I have attached a simple program

Thanks -- a little program is always helpful.

> that uses the fcntl system call in order
> to kill an arbitrary process of the same user.
> According to the fcntl man page, fcntl(fd,F_SETOWN,pid) returns zero if
> it has success.

Yes.

> If you strace the program while killing for exampe man running in another
> terminal, you will see that man is killed, but fcntl(fd,F_SETOWN,pid)
> will return EPERM,

I confirm that I see this problem in 2.4, with both Unix domain
and Internet domain sockets.

> where you can only find a very confusing explanation
> in the fcntl man page.

I'm not sure what explanation you mean here.  As far as I can
tell, the manual page just doesn't cover this point.

> I have looked into the kernel source of 2.4.30 and found out, that
> net/core/socket::sock_no_fcntl is the culprit if you use fcntl on Unix
> sockets.

Yes, looks that way to me, as well,  And the 2.2 code looks
similar.

> If pid is not your own pid or not your own process group,
> the system call will return EPERM but will also set the pid
> as you wanted to.

Yes.

> In the 2.6 kernel line, fcntl will react according the specification in
> the manual page.

Yes.

> If you also think, that one should clarify the return specification of
> fcntl(fd,F_SETOWN,pid) or 2.4.x kernels, please tell me and I will
> provide you with a patch for the manual page.

In fact I've written some new text under BUGS, which describes
the problem:

  In Linux 2.4 and earlier, there is bug that can occur  when  an
  unprivileged  process  uses  F_SETOWN to specify the owner of a
  socket file descriptor as a  process  (group)  other  than  the
  caller.   In this case, fcntl() can return -1 with errno set to
  EPERM, even when the owner process  (group)  is  one  that  the
  caller  has  permission to send signals to.  Despite this error
  return, the file descriptor owner is set, and signals  will  be
  sent to the owner.

Does that seem okay to you?

> Furthermore, it would be interseting to write there, what permissions
> one need in order to send signals to processes via fcntl

Good idea.  I added the following new text:

  Sending a signal to  the  owner  process  (group)  specified  by
  F_SETOWN  is  subject  to  the  same  permissions  checks as are
  described for kill(2), where the sending process is the one that
  employs F_SETOWN (but see BUGS below).

====

#define _GNU_SOURCE /* needed to get the defines */
#include <fcntl.h> /* in glibc 2.2 this has the needed
   values defined */
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

/**
 * Funnykill kills a program with fcntl
**/
int
main (int argc, char **argv)
{
  if (argc != 2)
    {
      fprintf (stderr, "Usage: funnykill <pid>\n");
      return 1;
    }

  int sockets[2];
  socketpair (AF_UNIX, SOCK_STREAM, 0, sockets);
  if (fcntl (sockets[0], F_SETFL, O_ASYNC | O_NONBLOCK) == -1)
      errMsg("fcntl-F_SETFL");
  if (fcntl (sockets[0], F_SETOWN, atoi (argv[1])) == -1)
      errMsg("fcntl-F_SETOWN");
//  fcntl (sockets[0], F_SETOWN, getpid());
  if (fcntl (sockets[0], F_SETSIG, SIGKILL) == -1)
      errMsg("fcntl-_FSETSIG");
  write (sockets[1], "good bye", 9);
}

20 years agoAdded EAGAIN error description for umount2().
Michael Kerrisk [Wed, 18 May 2005 14:42:07 +0000 (14:42 +0000)] 
Added EAGAIN error description for umount2().

20 years agoAdded MNT_EXPIRE, plus a few other tidy-ups.
Michael Kerrisk [Wed, 18 May 2005 14:34:43 +0000 (14:34 +0000)] 
Added MNT_EXPIRE, plus a few other tidy-ups.

20 years agoAdded comment:
Michael Kerrisk [Wed, 18 May 2005 09:39:52 +0000 (09:39 +0000)] 
Added comment:

.\" For Unix domain sockets and regular files, EPERM is only returned in
.\" Linux 2.2 and earlier; in Linux 2.4 and later, unprivileged can
.\" use mknod() to make these files.

20 years agoMinor fixes to CLONE_THREAD material.
Michael Kerrisk [Wed, 18 May 2005 08:29:38 +0000 (08:29 +0000)] 
Minor fixes to CLONE_THREAD material.

20 years agoAdded text on CLONE_THREAD and signals.
Michael Kerrisk [Tue, 17 May 2005 16:21:20 +0000 (16:21 +0000)] 
Added text on CLONE_THREAD and signals.

20 years agoSubstantially enhanced discussion of CLONE_THREAD.
Michael Kerrisk [Tue, 17 May 2005 15:06:30 +0000 (15:06 +0000)] 
Substantially enhanced discussion of CLONE_THREAD.

20 years agoUpdate date in header
Michael Kerrisk [Thu, 12 May 2005 09:08:33 +0000 (09:08 +0000)] 
Update date in header

20 years agoAdded 'rt_priority' and 'policy' to /proc/PID/stat.
Michael Kerrisk [Thu, 12 May 2005 09:01:58 +0000 (09:01 +0000)] 
Added 'rt_priority' and 'policy' to /proc/PID/stat.

20 years agoMinor changes to discussion of 'stat' signal fields.
Michael Kerrisk [Thu, 12 May 2005 08:42:35 +0000 (08:42 +0000)] 
Minor changes to discussion of 'stat' signal fields.

20 years agoVincent Fourmond / Joey (Martin) Schulze
Michael Kerrisk [Wed, 11 May 2005 16:06:19 +0000 (16:06 +0000)] 
Vincent Fourmond / Joey (Martin) Schulze
Removed discussion of `[[:<:]]' and `[[:>:]]' since they do
not seem to be in the glibc implementation.
As per
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=295666

>   The regex.7.gz mentions that [[:>:]] and [[:<:]] are available to designate word boundaries.
> However, neither grep nor sed, which are build on the standard libc regcomp do recognise this syntax.
> Moreover, the small program here
>
> #include <regex.h>
> #include <sys/types.h>
> #include <iostream>
>
> using namespace std;
>
> int main()
> {
>   regex_t RE;
>   int err_code = regcomp(&RE, "[[:<:]]",
>              REG_EXTENDED);
>   char Buffer[100];
>   if(err_code) {
>     regerror(err_code, &RE, Buffer, 100);
>     cerr << "Error : " << Buffer << endl;
>   }
> }
>
>
> produces the following error message:
>
> Error : Invalid character class name

20 years agoas per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=304242
Michael Kerrisk [Wed, 11 May 2005 15:14:54 +0000 (15:14 +0000)] 
as per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=304242

20 years agoPavel Heimlich <tropikhajma@seznam.cz>
Michael Kerrisk [Wed, 11 May 2005 14:18:48 +0000 (14:18 +0000)] 
Pavel Heimlich <tropikhajma@seznam.cz>

>   I've noticed that man pages
> console_ioctl.4
> console.4
> mouse.4
> tty.4
> vcs.4
> refer to ttys (4), which should in fact be ttyS (4).

Hello Pavel,

The man command on Linux is actually case insensitive with respect
to page names, so "man ttys" works!  Nevertheless, I agree with
you, and I've changed the pages as you suggest.

20 years ago__W* flags can't be used with waitid()
Michael Kerrisk [Tue, 10 May 2005 17:16:28 +0000 (17:16 +0000)] 
__W* flags can't be used with waitid()

20 years agoAdded CLONE_SYSVSEM, CLONE_UNTRACED, CLONE_STOPPED.
Michael Kerrisk [Tue, 10 May 2005 16:48:27 +0000 (16:48 +0000)] 
Added CLONE_SYSVSEM, CLONE_UNTRACED, CLONE_STOPPED.

20 years agoNoted that lock conversions are not atomic.
Michael Kerrisk [Tue, 10 May 2005 06:43:47 +0000 (06:43 +0000)] 
Noted that lock conversions are not atomic.

20 years agoAdded_CS_GNU_LIBC_VERSION and_CS_GNU_LIBPTHREAD_VERSION.
Michael Kerrisk [Mon, 9 May 2005 10:53:56 +0000 (10:53 +0000)] 
Added_CS_GNU_LIBC_VERSION and_CS_GNU_LIBPTHREAD_VERSION.

20 years agoAdded FIXME
Michael Kerrisk [Mon, 9 May 2005 10:37:48 +0000 (10:37 +0000)] 
Added FIXME

20 years agoAdded FIXME (capabilities are per-thread)
Michael Kerrisk [Tue, 3 May 2005 14:27:04 +0000 (14:27 +0000)] 
Added FIXME (capabilities are per-thread)

20 years agoAdded a NOTE to point out that the affinity mask is actually a
Michael Kerrisk [Tue, 3 May 2005 14:24:08 +0000 (14:24 +0000)] 
Added a NOTE to point out that the affinity mask is actually a
per-thread attribute that can be adjusted independently
for each thread in a thread group.

20 years agoAdded FIXME for UDP_CORK
Michael Kerrisk [Tue, 3 May 2005 12:26:25 +0000 (12:26 +0000)] 
Added FIXME for UDP_CORK

20 years agoAdd text to note that sched_setaffinity() will migrate the
Michael Kerrisk [Tue, 3 May 2005 11:24:33 +0000 (11:24 +0000)] 
Add text to note that sched_setaffinity() will migrate the
affected process to one of the specified CPUs if necessary.

20 years agoNoted aberrant Linux behaviour w.r.t. new
Michael Kerrisk [Mon, 25 Apr 2005 08:36:43 +0000 (08:36 +0000)] 
Noted aberrant Linux behaviour w.r.t. new
attaches to a segment that has already been marked for deletion.

20 years agoTypos/grammar fixes.
Michael Kerrisk [Mon, 25 Apr 2005 07:08:00 +0000 (07:08 +0000)] 
Typos/grammar fixes.

20 years agoFormatting fixes
Michael Kerrisk [Mon, 25 Apr 2005 05:16:35 +0000 (05:16 +0000)] 
Formatting fixes

20 years agoAdded some pages to SEE ALSO
Michael Kerrisk [Thu, 21 Apr 2005 09:11:01 +0000 (09:11 +0000)] 
Added some pages to SEE ALSO

20 years agoFix typo
Michael Kerrisk [Tue, 19 Apr 2005 10:58:30 +0000 (10:58 +0000)] 
Fix typo

20 years agoClarified wording of the 'pid == -1' case.
Michael Kerrisk [Tue, 19 Apr 2005 10:53:55 +0000 (10:53 +0000)] 
Clarified wording of the 'pid == -1' case.

20 years agoru_nswap has never contained useful information.
Michael Kerrisk [Tue, 19 Apr 2005 09:02:05 +0000 (09:02 +0000)] 
ru_nswap has never contained useful information.
Kernel 2.6.6 clarified that with a patch
("[PATCH] eliminate nswap and cnswap").  See also:
http://www.ussg.iu.edu/hypermail/linux/kernel/0404.1/0720.html

20 years agoFix spelling mistake
Michael Kerrisk [Mon, 18 Apr 2005 15:19:09 +0000 (15:19 +0000)] 
Fix spelling mistake