aboutsummaryrefslogtreecommitdiffstats
path: root/libc/arch-x86/syscalls/fchmod.S
Commit message (Collapse)AuthorAgeFilesLines
* Add fchmodat(AT_SYMLINK_NOFOLLOW) and fchmod O_PATH supportNick Kralevich2015-02-021-26/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Many libc functions have an option to not follow symbolic links. This is useful to avoid security sensitive code from inadvertantly following attacker supplied symlinks and taking inappropriate action on files it shouldn't. For example, open() has O_NOFOLLOW, chown() has lchown(), stat() has lstat(), etc. There is no such equivalent function for chmod(), such as lchmod(). To address this, POSIX introduced fchmodat(AT_SYMLINK_NOFOLLOW), which is intended to provide a way to perform a chmod operation which doesn't follow symlinks. Currently, the Linux kernel doesn't implement AT_SYMLINK_NOFOLLOW. In GLIBC, attempting to use the AT_SYMLINK_NOFOLLOW flag causes fchmodat to return ENOTSUP. Details are in "man fchmodat". Bionic currently differs from GLIBC in that AT_SYMLINK_NOFOLLOW is silently ignored and treated as if the flag wasn't present. This patch provides a userspace implementation of AT_SYMLINK_NOFOLLOW for bionic. Using open(O_PATH | O_NOFOLLOW), we can provide a way to atomically change the permissions on files without worrying about race conditions. As part of this change, we add support for fchmod on O_PATH file descriptors, because it's relatively straight forward and could be useful in the future. The basic idea behind this implementation comes from https://sourceware.org/bugzilla/show_bug.cgi?id=14578 , specifically comment #10. Change-Id: I1eba0cdb2c509d9193ceecf28f13118188a3cfa7
* Ensure __set_errno is still visible on LP32.Elliott Hughes2014-09-081-3/+1
| | | | | | | | | | | | | | | | | | The use of the .hidden directive to avoid going via the PLT for __set_errno had the side-effect of actually making __set_errno hidden (which is odd because assembler directives don't usually affect symbols defined in a different file --- you can't even create a weak reference to a symbol that's defined in a different file). This change switches the system call stubs over to a new always-hidden __set_errno_internal and has a visible __set_errno on LP32 just for binary compatibility with old NDK apps. (cherry-pick of 7efad83d430f4d824f2aaa75edea5106f6ff8aae.) Bug: 17423135 Change-Id: I6b6d7a05dda85f923d22e5ffd169a91e23499b7b
* Make __set_errno hidden in asm.Dan Albert2014-08-081-0/+2
| | | | | | | This fixes the build after the -Bsymbolic change. Bug: 16853291 Change-Id: I989c9fec3c32e0289ea257a3bd2b7fd2709b6ce2
* Revert "Fix incorrect relocations for x86."Dan Albert2014-08-081-1/+1
| | | | Bug: 16853291 This reverts commit 512bc5232689bec9c763c8247b59de970096ff87.
* Fix incorrect relocations for x86.Dan Albert2014-08-071-1/+1
| | | | | | | These calls were not going through the PLT like they should have been. Bug: 16853291 Change-Id: Id70488b077256a70137c4417f21be2c2d1d4341c
* Remove unnecessary instructions from x86/x86_64 syscalls.Elliott Hughes2014-06-051-1/+0
| | | | | | | | __set_errno returns -1 exactly so that callers don't need to bother. The other architectures were already taking advantage of this, but no one had ever fixed x86 and x86_64. Change-Id: Ie131494be664f6c4a1bbf8c61bbbed58eac56122
* Fix x86 cfi directives for syscalls.Christopher Ferris2014-05-291-2/+3
| | | | | | | | The syscall generation always used 4 bytes for each push cfi directive. However, the first push should always use an offset of 8 bytes, each subsequent push after that is only 4 bytes though. Change-Id: Ibaabd107f399ef67010b9a08213783957c2f74a9
* Add cfi directives to x86 syscalls.Christopher Ferris2014-01-061-0/+3
| | | | | | | | | Modify the syscalls script to generate the cfi directives for x86 syscalls. Update the x86 syscalls. Change-Id: Ia1993dc714a7e79f917087fff8200e9a02c52603
* Stop using the non-uapi <linux/err.h> header file.Elliott Hughes2013-11-071-3/+1
| | | | | | | We only need it for MAX_ERRNO, and it's time we had somewhere to put the little assembler utility macros we've been putting off writing. Change-Id: I9354d2e0dc47c689296a34b5b229fc9ba75f1a83
* Sort the syscalls.mk files, give all generated files the same header.Elliott Hughes2013-10-161-1/+2
| | | | | | No non-comment changes to the .S files. Change-Id: Iafcfd004c3ea92b64268f80ab16df615b97cefac
* Regenerate the system call stubs (to get x86_64).Elliott Hughes2013-10-011-1/+1
| | | | | | | | This touches the x86 stubs too because arm, x86, and x86_64 now all share the same header (at a source level), which causes a reordering of the #include lines. Change-Id: If9a1e2b2718bd41d8399fea748bce672c513ef84
* The SYS_ constants should cover all __NR_ values.Elliott Hughes2013-03-211-1/+1
| | | | | | | | | | | <sys/linux-syscalls.h> only contains constants for the syscalls we're generating stubs for. We want all the syscalls available on the architecture in question. Keep using <sys/linux-syscalls.h> on ARM for now because the __NR_ARM_set_tls and __NR_ARM_cacheflush values aren't in <asm/unistd.h>. Change-Id: I66683950d87d9b18d6107d0acc0ed238a4496f44
* Use the kernel's MAX_ERRNO in the syscall stubs.Elliott Hughes2013-03-121-1/+2
| | | | | Bug: http://code.google.com/p/android/issues/detail?id=53104 Change-Id: Iaabf7025b153e96dc5eca231a33a32d4cb7d8116
* Switch x86 syscall stubs over to the ENTER/END style of the ARM stubs.Elliott Hughes2013-02-061-6/+3
| | | | | | | | | Also update the x86 asm.h to support this; we need it for libm assembler anyway. Also clean up the _FBSDID hack in <sys/cdefs.h>. Change-Id: Iababd977b8110ec022bf7c93f4d62ece47630e7c
* auto import from //depot/cupcake/@135843The Android Open Source Project2009-03-031-0/+26
|
* auto import from //depot/cupcake/@135843The Android Open Source Project2009-03-031-26/+0
|
* Initial Contributionandroid-1.0The Android Open Source Project2008-10-211-0/+26