dirname() replaces broken stpcpy index arithmetic that produced an
empty string for single-component paths (e.g. /koolhome), causing
statfs to fail and fall back to a regular directory. Use path in
the error message since dirname() modifies btrfs_check in-place,
making it unusable for logging after the call.
Fixes: c1d36a8acb1d (2019-05-04; "Add support for btrfs subvolumes for user homes")
Signed-off-by: Hadi Chokr <hadichokr@icloud.com>
Reviewed-by: Alejandro Colomar <alx@kernel.org>
Prog, path);
fail_exit(E_HOMEDIR, process_selinux);
}
Prog, path);
fail_exit(E_HOMEDIR, process_selinux);
}
- stpcpy(&btrfs_check[strlen(path) - strlen(cp) - 1], "");
- if (statfs(btrfs_check, &sfs) == -1) {
- fprintf(stderr, "%s: statfs(\"%s\"): %s\n",
- Prog, btrfs_check, strerrno());
+ if (statfs(dirname(btrfs_check), &sfs) == -1) {
+ fprintf(stderr, "%s: statfs(dirname(\"%s\")): %s\n",
+ Prog, path, strerrno());
fail_exit(E_HOMEDIR, process_selinux);
}
free(btrfs_check);
fail_exit(E_HOMEDIR, process_selinux);
}
free(btrfs_check);