diff options
Diffstat (limited to 'fs/proc')
-rw-r--r-- | fs/proc/array.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index d3696708fc1a..377a37366dde 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c | |||
@@ -308,6 +308,10 @@ static void render_cap_t(struct seq_file *m, const char *header, | |||
308 | seq_putc(m, '\n'); | 308 | seq_putc(m, '\n'); |
309 | } | 309 | } |
310 | 310 | ||
311 | /* Remove non-existent capabilities */ | ||
312 | #define NORM_CAPS(v) (v.cap[CAP_TO_INDEX(CAP_LAST_CAP)] &= \ | ||
313 | CAP_TO_MASK(CAP_LAST_CAP + 1) - 1) | ||
314 | |||
311 | static inline void task_cap(struct seq_file *m, struct task_struct *p) | 315 | static inline void task_cap(struct seq_file *m, struct task_struct *p) |
312 | { | 316 | { |
313 | const struct cred *cred; | 317 | const struct cred *cred; |
@@ -321,6 +325,11 @@ static inline void task_cap(struct seq_file *m, struct task_struct *p) | |||
321 | cap_bset = cred->cap_bset; | 325 | cap_bset = cred->cap_bset; |
322 | rcu_read_unlock(); | 326 | rcu_read_unlock(); |
323 | 327 | ||
328 | NORM_CAPS(cap_inheritable); | ||
329 | NORM_CAPS(cap_permitted); | ||
330 | NORM_CAPS(cap_effective); | ||
331 | NORM_CAPS(cap_bset); | ||
332 | |||
324 | render_cap_t(m, "CapInh:\t", &cap_inheritable); | 333 | render_cap_t(m, "CapInh:\t", &cap_inheritable); |
325 | render_cap_t(m, "CapPrm:\t", &cap_permitted); | 334 | render_cap_t(m, "CapPrm:\t", &cap_permitted); |
326 | render_cap_t(m, "CapEff:\t", &cap_effective); | 335 | render_cap_t(m, "CapEff:\t", &cap_effective); |