Skip to content

Commit

Permalink
[linux] fix: memory-mapped file, stat: No such file or directory
Browse files Browse the repository at this point in the history
In old linux kernel (e.g. linux-2.6) which does not have this feature: Commit
6b4e306aa3dc ("ns: proc files for namespace naming policy."), means this path
"/proc/self/ns" is not existed. Since lsof-4.96.0 with Commit dbad150 ("
[linux] obtain correct information of memory-mapped file."), compare_mntns()
would misunderstand it is in a different mount namespace if "/proc/self/ns" is
not existed, returns -1, go through map_files lookup, and finally lead to lsof
gets failed with error message "stat: No such file or directory".

If "/proc/self/ns" or its underlying path is not existed, compare_mntns()
returns 0 instead of -1, in order to go through stat_directly as old days.

Signed-off-by: Jones Syue <[email protected]>
  • Loading branch information
jones2024gh committed Jan 8, 2025
1 parent bbf320c commit ce96381
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions lib/dialects/linux/dproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1370,14 +1370,14 @@ static int compare_mntns(int pid) /* pid of the target process */
int ret;

if (stat("/proc/self/ns/mnt", &sb_self))
return -1;
return 0;

ret = snprintf(nspath, sizeof(nspath), "/proc/%d/ns/mnt", pid);
if (ret >= sizeof(nspath) || ret <= 0)
return -1;
return 0;

if (stat(nspath, &sb_target))
return -1;
return 0;

if (sb_self.st_ino != sb_target.st_ino)
return -1;
Expand Down

0 comments on commit ce96381

Please sign in to comment.