diff --git a/lib/dialects/freebsd/dnode.c b/lib/dialects/freebsd/dnode.c index d68c0441..c8ab17ff 100644 --- a/lib/dialects/freebsd/dnode.c +++ b/lib/dialects/freebsd/dnode.c @@ -447,6 +447,12 @@ void process_vnode(struct lsof_context *ctx, struct kinfo_file *kf, vfs_path_len = strlen(vfs_path); if (vfs_path_len >= vfs_dir_len) { + if (vfs_fsname_len + vfs_path_len - vfs_dir_len >= + sizeof(vfs_path)) { + (void)snpf(Namech, Namechl, "nullfs path too long"); + enter_nm(ctx, Namech); + return; + } memmove(&vfs_path[vfs_fsname_len], &vfs_path[vfs_dir_len], vfs_path_len - vfs_dir_len + 1); memcpy(vfs_path, vfs->fsname, vfs_fsname_len);