mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 16:36:21 +00:00
108 lines
3.7 KiB
C
108 lines
3.7 KiB
C
/* Tests various combinations of dfd and pathname for *at syscalls.
|
|
In particular, dfd should not be checked when pathname is absolute.
|
|
See https://bugs.kde.org/show_bug.cgi?id=307103 for more information.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <fcntl.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/syscall.h>
|
|
|
|
#define DIRECTORY "/tmp/"
|
|
#define FILENAME "abc123"
|
|
|
|
int main(void)
|
|
{
|
|
char buf[1];
|
|
struct stat stats;
|
|
|
|
int dfd = open(DIRECTORY, O_RDONLY);
|
|
|
|
/* linkat */
|
|
linkat(dfd, FILENAME, dfd, FILENAME, 0);
|
|
linkat(0x9879151, DIRECTORY FILENAME, 0x9879152, DIRECTORY FILENAME, 0);
|
|
linkat(AT_FDCWD, FILENAME, AT_FDCWD, FILENAME, 0);
|
|
linkat(0x9879153, FILENAME, 0x9879154, FILENAME, 0); /* warning for this one */
|
|
|
|
/* symlinkat */
|
|
symlinkat(FILENAME, dfd, FILENAME);
|
|
symlinkat(DIRECTORY FILENAME, 0x26868151, DIRECTORY FILENAME);
|
|
symlinkat(FILENAME, AT_FDCWD, FILENAME);
|
|
symlinkat(FILENAME, 0x26868152, FILENAME); /* warning for this one */
|
|
|
|
/* readlinkat */
|
|
readlinkat(dfd, FILENAME, buf, 1);
|
|
readlinkat(0x4368151, DIRECTORY FILENAME, buf, 1);
|
|
readlinkat(AT_FDCWD, FILENAME, buf, 1);
|
|
readlinkat(0x4368152, FILENAME, buf, 1); /* warning for this one */
|
|
|
|
#if defined(SOLARIS_FREALPATHAT_SYSCALL)
|
|
/* frealpathat - not available directly */
|
|
syscall(SYS_frealpathat, dfd, FILENAME, buf, 1);
|
|
syscall(SYS_frealpathat, 0x443115, DIRECTORY FILENAME, buf, 1);
|
|
syscall(SYS_frealpathat, AT_FDCWD, FILENAME, buf, 1);
|
|
#endif /* SOLARIS_FREALPATHAT_SYSCALL */
|
|
|
|
/* faccessat */
|
|
faccessat(dfd, FILENAME, F_OK, 0);
|
|
faccessat(0x4132151, DIRECTORY FILENAME, F_OK, 0);
|
|
faccessat(AT_FDCWD, FILENAME, F_OK, 0);
|
|
faccessat(0x4132152, FILENAME, F_OK, 0); /* warning for this one */
|
|
|
|
/* fchownat */
|
|
fchownat(dfd, FILENAME, -1, -1, 0);
|
|
fchownat(0x4369251, DIRECTORY FILENAME, -1, -1, 0);
|
|
fchownat(AT_FDCWD, FILENAME, -1, -1, 0);
|
|
fchownat(0x4369252, FILENAME, -1, -1, 0); /* warning for this one */
|
|
|
|
/* renameat */
|
|
renameat(dfd, FILENAME, dfd, FILENAME);
|
|
renameat(0x4371151, DIRECTORY FILENAME, 0x4371152, DIRECTORY FILENAME);
|
|
renameat(AT_FDCWD, FILENAME, AT_FDCWD, FILENAME);
|
|
renameat(0x4371153, FILENAME, 0x4371154, FILENAME); /* warning for this one */
|
|
|
|
/* unlinkat */
|
|
unlinkat(dfd, FILENAME, 0);
|
|
unlinkat(0x7608151, DIRECTORY FILENAME, 0);
|
|
unlinkat(AT_FDCWD, FILENAME, 0);
|
|
unlinkat(0x7608152, FILENAME, 0); /* warning for this one */
|
|
|
|
/* fstatat */
|
|
fstatat(dfd, FILENAME, &stats, 0);
|
|
fstatat(0x42515151, DIRECTORY FILENAME, &stats, 0);
|
|
fstatat(AT_FDCWD, FILENAME, &stats, 0);
|
|
fstatat(0x42515152, FILENAME, &stats, 0); /* warning for this one */
|
|
|
|
/* openat */
|
|
openat(dfd, FILENAME, O_RDONLY);
|
|
openat(0x9038151, DIRECTORY FILENAME, O_RDONLY);
|
|
openat(AT_FDCWD, FILENAME, O_RDONLY);
|
|
openat(0x9038152, FILENAME, O_RDONLY); /* warning for this one */
|
|
|
|
/* fchmodat */
|
|
fchmodat(dfd, FILENAME, S_IRUSR | S_IWUSR, 0);
|
|
fchmodat(0x4303151, DIRECTORY FILENAME, S_IRUSR | S_IWUSR, 0);
|
|
fchmodat(AT_FDCWD, FILENAME, S_IRUSR | S_IWUSR, 0);
|
|
fchmodat(0x4303152, FILENAME, S_IRUSR | S_IWUSR, 0); /* warning for this one */
|
|
|
|
/* mkdirat */
|
|
mkdirat(dfd, FILENAME, S_IRUSR | S_IWUSR);
|
|
mkdirat(0x9384151, DIRECTORY FILENAME, S_IRUSR | S_IWUSR);
|
|
mkdirat(AT_FDCWD, FILENAME, S_IRUSR | S_IWUSR);
|
|
mkdirat(0x9384152, FILENAME, S_IRUSR | S_IWUSR); /* warning for this one */
|
|
|
|
/* utimensat */
|
|
utimensat(dfd, FILENAME, NULL, 0);
|
|
utimensat(0x59837215, DIRECTORY FILENAME, NULL, 0);
|
|
utimensat(AT_FDCWD, FILENAME, NULL, 0);
|
|
utimensat(0x59837216, FILENAME, NULL, 0); /* warning for this one */
|
|
|
|
rmdir(DIRECTORY FILENAME);
|
|
rmdir(FILENAME);
|
|
close(dfd);
|
|
return 0;
|
|
}
|