perf tools: Fix mode setting in copyfile_mode_ns()
Adrian Hunter
reviewerPATCH 1/1 perf tools: Fix mode setting in copyfile_mode_ns()
slow_copyfile() opens the file by name, so "write" permissions must not be removed in copyfile_mode_ns() before calling slow_copyfile().
Example:
Before:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -k /proc/kcore Couldn't add /proc/kcore
After:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -v -k /proc/kcore kcore added to build-id cache directory /home/ahunter/.debug/[kernel.kcore]/37e340b1b5a7cf4f57ba8de2bc777359588a957f/2019100709562289
--- tools/perf/util/copyfile.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
tools/perf/util/copyfile.c +5 -3
@@ -101,14 +101,16 @@ static int copyfile_mode_ns(const char *from, const char *to, mode_t mode,if (tofd <0 ) goto out; -if (fchmod (tofd, mode)) - goto out_close_to; -if (st.st_size ==0 ) {/* /proc? do it slowly... */ err =slow_copyfile (from, tmp, nsi); +if (!err &&fchmod (tofd, mode)) + err =-1 ; goto out_close_to; } +if (fchmod (tofd, mode)) + goto out_close_to; +nsinfo__mountns_enter (nsi, &nsc); fromfd =open (from,O_RDONLY );nsinfo__mountns_exit (&nsc);
Signature · 1 line
2.17.1
Quoted 11 lines · Adrian Hunter
slow_copyfile()opens the file by name, so "write" permissions must not be removed incopyfile_mode_ns()before callingslow_copyfile().Example:
Before:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -k /proc/kcore Couldn't add /proc/kcore
Quoted 7 lines
After:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -v -k /proc/kcore kcore added to build-id cache directory /home/ahunter/.debug/[kernel.kcore]/37e340b1b5a7cf4f57ba8de2bc777359588a957f/2019100709562289Signed-off-by Adrian Hunter <[email protected]>
thanks,
jirka
Quoted 31 lines
--- tools/perf/util/copyfile.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)tools/perf/util/copyfile.c +5
-3@@ -101,14 +101,16 @@ static int copyfile_mode_ns(const char *from, const char *to, mode_t mode,if (tofd <0 ) goto out; -if (fchmod (tofd, mode)) - goto out_close_to; -if (st.st_size ==0 ) {/* /proc? do it slowly... */ err =slow_copyfile (from, tmp, nsi); +if (!err &&fchmod (tofd, mode)) + err =-1 ; goto out_close_to; } +if (fchmod (tofd, mode)) + goto out_close_to; +nsinfo__mountns_enter (nsi, &nsc); fromfd =open (from,O_RDONLY );nsinfo__mountns_exit (&nsc);Signature · 1 line
2.17.1
Arnaldo Carvalho de Melo
AppliedEm Mon, Oct 07, 2019 at 12:47:47PM +0200, Jiri Olsa escreveu:
Quoted 18 lines · Adrian Hunter
Quoted 17 lines
slow_copyfile()opens the file by name, so "write" permissions must not be removed incopyfile_mode_ns()before callingslow_copyfile().Example:
Before:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -k /proc/kcore Couldn't add /proc/kcoreAfter:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -v -k /proc/kcore kcore added to build-id cache directory /home/ahunter/.debug/[kernel.kcore]/37e340b1b5a7cf4f57ba8de2bc777359588a957f/2019100709562289
Quoted 3 lines
Quoted 1 line
Signed-off-by Adrian Hunter <[email protected]>Acked-by Jiri Olsa <[email protected]>
Thanks, applied to perf/urgent.
- Arnaldo
Quoted 34 lines
thanks,
jirkaQuoted 31 lines
--- tools/perf/util/copyfile.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)tools/perf/util/copyfile.c +5
-3@@ -101,14 +101,16 @@ static int copyfile_mode_ns(const char *from, const char *to, mode_t mode,if (tofd <0 ) goto out; -if (fchmod (tofd, mode)) - goto out_close_to; -if (st.st_size ==0 ) {/* /proc? do it slowly... */ err =slow_copyfile (from, tmp, nsi); +if (!err &&fchmod (tofd, mode)) + err =-1 ; goto out_close_to; } +if (fchmod (tofd, mode)) + goto out_close_to; +nsinfo__mountns_enter (nsi, &nsc); fromfd =open (from,O_RDONLY );nsinfo__mountns_exit (&nsc);Signature · 1 line
2.17.1
Signature · 1 line
- Arnaldo
The following commit has been merged into the perf/urgent branch of tip:
The following commit has been merged into the perf/urgent branch of tip:
Commit-ID: 5a0baf5123236362fda4e9772cc63b7faa16a0df Gitweb: https://git.kernel.org/tip/5a0baf5123236362fda4e9772cc63b7faa16a0df Author: Adrian Hunter <[email protected]> AuthorDate: Mon, 07 Oct 2019 10:02:21 +03:00 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitterDate: Tue, 15 Oct 2019 12:05:18 -03:00
perf tools: Fix mode setting in copyfile_mode_ns()
slow_copyfile() opens the file by name, so "write" permissions must not be removed in copyfile_mode_ns() before calling slow_copyfile().
Example:
Before:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -k /proc/kcore Couldn't add /proc/kcore
After:
$ sudo chmod +r /proc/kcore $ sudo setcap "cap_sys_admin,cap_sys_ptrace,cap_syslog,cap_sys_rawio=ep" tools/perf/perf $ tools/perf/perf buildid-cache -v -k /proc/kcore kcore added to build-id cache directory /home/ahunter/.debug/[kernel.kcore]/37e340b1b5a7cf4f57ba8de2bc777359588a957f/2019100709562289
--- tools/perf/util/copyfile.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
tools/perf/util/copyfile.c +5 -3
@@ -101,14 +101,16 @@ static int copyfile_mode_ns(const char *from, const char *to, mode_t mode,if (tofd <0 ) goto out; -if (fchmod (tofd, mode)) - goto out_close_to; -if (st.st_size ==0 ) {/* /proc? do it slowly... */ err =slow_copyfile (from, tmp, nsi); +if (!err &&fchmod (tofd, mode)) + err =-1 ; goto out_close_to; } +if (fchmod (tofd, mode)) + goto out_close_to; +nsinfo__mountns_enter (nsi, &nsc); fromfd =open (from,O_RDONLY );nsinfo__mountns_exit (&nsc);