if uio->uio_offset != -1. This fixes a problem with aio_read/write
and permits a straightforward implementation of pread/pwrite.
PR: kern/8669
Submitted by: John Plevyak <jplevyak@inktomi.com>
Reviewed by: Matthew Dillon <dillon@apollo.backplane.com>
the IP header (this would not work for bridged packets).
This has been fixed long ago in the 2.2 branch.
Problem noticed by: a few people
Fix suggested by: Remy Nonnenmacher
settings you've just sent them and return random values if you follow
the set by a get. This causes problems when you latter run a Tag-enabled
command when you've command tagged mode off.
that counted the number of elements in argv. The counter is incremented
in the next-iteration section of the loop, not the body, so at termination
it's already "counted" the element that failed the continuation test - in
this case the NULL argv terminator.
Noted by: bde
call them. All the execX() libc functions should be vfork() safe now.
Specifically:
- execlp() does the argument count-and-build into a vector from alloca
(like the others) - buildargv() is no longer used (and gone).
- execvp() uses alloca/strcpy rather than strdup().
- the ENOEXEC handler uses alloca rather than malloc.
- a couple of free() calls removed - alloca works on the local stack and
the allocations are freed on function exit (which is why buildargv
wasn't useful - it's alloca() context would disappear on return).
Along the way:
- If alloca() fails (can it?), set errno = ENOMEM explicitly.
- The ENOEXEC recovery routine that trys again with /bin/sh appeared to
not be terminating the new argv[] array for /bin/sh, allowing it to
walk off the end of the list.
I dithered a bit about using alloca() even more as it's most commonly
associated with gcc. However, standalone portable (using malloc) and
machine-specific assembler alloca implementations appear to be available
on just about all the architectures we're likely to want to port to.
alloca will be the least of our problems if ever going to another compiler.
kern.chroot_allow_open_directories = 0
chroot(2) fails if there are open directories.
kern.chroot_allow_open_directories = 1 (default)
chroot(2) fails if there are open directories and the process
is subject of a previous chroot(2).
kern.chroot_allow_open_directories = anything else
filedescriptors are not checked. (old behaviour).
I'm very interested in reports about software which breaks when
running with the default setting.
affects cases where there is a slave but no master. These bugs
were usually recovered from provided ATAPI was configured, but only
after lengthy delays. Configuring ATAPI still fixes some bugs for
non-atapi drives.
Don't wait for seek complete in wdreset(). If necessary for pre-ata
drives, it can be waited for later (we got it wrong by only looking
at it for drive 0 anyway). It is set as part of a historical
signature for ata drives but doesn't say anything useful about the
reset state. It is cleared as part of a non-historical signature
for atapi drives so that drivers which don't understand atapi drives
seem to see no drive. Waiting for it caused lengthy delays and
broke the status returned by wdreset() in cases where the master
was not an ata drive. Then the whole wdprobe() failed in some
cases where the recovery code didn't work.
Don't wait for drive ready in wdreset(). The considerations are
the same as for seek complete, except drive ready does say something
useful about the reset state of ata drives, and waiting for it
later is required anyway for such drives.
Lengthy delays can now be avoided by not configuring nonexistent
(ata) drives. Unfortunately, this breaks detection of atapi drives
in some configurations.