(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/file-dotlock.c) |
| |
| 691 | | | int file_dotlock_delete(struct dotlock **dotlock_p) |
| 692 | | | { |
| 693 | | | struct dotlock *dotlock; |
| 694 | | | const char *lock_path; |
| 695 | | | struct stat st; |
| 696 | | | |
| 697 | | | dotlock = *dotlock_p; |
Event 1:
dotlock is set to *dotlock_p.
hide
|
|
| 698 | | | *dotlock_p = NULL; |
| 699 | | | |
| 700 | [+] | | lock_path = file_dotlock_get_lock_path(dotlock); |
Event 2:
dotlock, which evaluates to *dotlock_p, is passed to file_dotlock_get_lock_path(). See related event 1.
hide
|
|
 |
| 701 | [+] | | if (nfs_safe_lstat(lock_path, &st) < 0) { |
 |
| 702 | | | if (errno == ENOENT) {
x /usr/include/asm-generic/errno-base.h |
| |
5 | #define ENOENT 2 /* No such file or directory */ |
| |
|
| 703 | | | dotlock_replaced_warning(dotlock, TRUE); |
| 704 | | | file_dotlock_free(&dotlock); |
| 705 | | | return 0; |
| 706 | | | } |
| 707 | | | |
| 708 | | | i_error("lstat(%s) failed: %m", lock_path); |
| 709 | | | file_dotlock_free(&dotlock); |
| 710 | | | return -1; |
| 711 | | | } |
| 712 | | | |
| 713 | | | if (dotlock->ino != st.st_ino || |
Event 13:
Skipping " if". - dotlock->ino != st.st_ino evaluates to false.
- gnu_dev_major(...) == gnu_dev_major(...) evaluates to true.
- gnu_dev_minor(...) == gnu_dev_minor(...) evaluates to true.
hide
|
|
| 714 | | | !CMP_DEV_T(dotlock->dev, st.st_dev)) {
x /home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/compat.h |
| |
59 | # define CMP_DEV_T(a, b) (major(a) == major(b) && minor(a) == minor(b)) |
| |
x /usr/include/sys/sysmacros.h |
| |
65 | # define major(dev) gnu_dev_major (dev) |
| |
x /usr/include/sys/sysmacros.h |
| |
65 | # define major(dev) gnu_dev_major (dev) |
| |
x /usr/include/sys/sysmacros.h |
| |
66 | # define minor(dev) gnu_dev_minor (dev) |
| |
x /usr/include/sys/sysmacros.h |
| |
66 | # define minor(dev) gnu_dev_minor (dev) |
| |
|
| 715 | | | dotlock_replaced_warning(dotlock, FALSE); |
| 716 | | | errno = EEXIST; |
| 717 | | | file_dotlock_free(&dotlock); |
| 718 | | | return 0; |
| 719 | | | } |
| 720 | | | |
| 721 | | | if (dotlock->mtime != st.st_mtime && dotlock->fd == -1) {
x /usr/include/bits/stat.h |
| |
95 | # define st_mtime st_mtim.tv_sec |
| |
|
Event 18:
Skipping " if". dotlock->mtime != st.st_mtim.tv_sec evaluates to false.
hide
|
|
| 722 | | | i_warning("Our dotlock file %s was modified (%s vs %s), " |
| 723 | | | "assuming it wasn't overridden (kept it %d secs)", |
| 724 | | | lock_path, |
| 725 | | | dec2str(dotlock->mtime), dec2str(st.st_mtime),
x /usr/include/bits/stat.h |
| |
95 | # define st_mtime st_mtim.tv_sec |
| |
|
| 726 | | | (int)(time(NULL) - dotlock->lock_time)); |
| 727 | | | } |
| 728 | | | |
| 729 | | | if (unlink(lock_path) < 0) { |
Event 19:
lock_path, which evaluates to NULL, is passed to unlink(). See related event 10.
hide
Null Pointer Dereference
The body of unlink() dereferences lock_path, but it is NULL. The issue can occur if the highlighted code executes. See related event 19. Show: All events | Only primary events |
|
| |