Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 87531
b: refs/heads/master
c: eec25fa
h: refs/heads/master
i:
  87529: 52ad199
  87527: 9890018
v: v3
  • Loading branch information
Yuri Funduryan authored and Mauro Carvalho Chehab committed Mar 20, 2008
1 parent 161987e commit 484f255
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: aedb60a67c10a0861af179725d060765262ba0fb
refs/heads/master: eec25fa7f98f8707eb84fede96f10496adf5047f
41 changes: 21 additions & 20 deletions trunk/drivers/media/video/saa7134/saa7134-cards.c
Original file line number Diff line number Diff line change
Expand Up @@ -2484,27 +2484,28 @@ struct saa7134_board saa7134_boards[] = {
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,
.gpiomask = 0x080200000,
.inputs = {{
.name = name_tv,
.vmux = 4,
.amux = TV,
.tv = 1,
},{
.name = name_comp1,
.vmux = 1,
.amux = LINE2,
},{
.name = name_comp2,
.vmux = 0,
.amux = LINE2,
},{
.name = name_svideo,
.vmux = 8,
.amux = LINE2,
}},
.inputs = { {
.name = name_tv,
.vmux = 4,
.amux = TV,
.tv = 1,
}, {
.name = name_comp1,
.vmux = 1,
.amux = LINE2,
}, {
.name = name_comp2,
.vmux = 0,
.amux = LINE2,
}, {
.name = name_svideo,
.vmux = 8,
.amux = LINE2,
} },
.radio = {
.name = name_radio,
.amux = LINE1,
.name = name_radio,
.amux = TV,
.gpio = 0x0200000,
},
},
[SAA7134_BOARD_ASUSTeK_P7131_DUAL] = {
Expand Down
3 changes: 2 additions & 1 deletion trunk/include/linux/security.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ extern int cap_inode_need_killpriv(struct dentry *dentry);
extern int cap_inode_killpriv(struct dentry *dentry);
extern int cap_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, int flags);
extern void cap_task_reparent_to_init (struct task_struct *p);
extern int cap_task_kill(struct task_struct *p, struct siginfo *info, int sig, u32 secid);
extern int cap_task_setscheduler (struct task_struct *p, int policy, struct sched_param *lp);
extern int cap_task_setioprio (struct task_struct *p, int ioprio);
extern int cap_task_setnice (struct task_struct *p, int nice);
Expand Down Expand Up @@ -2186,7 +2187,7 @@ static inline int security_task_kill (struct task_struct *p,
struct siginfo *info, int sig,
u32 secid)
{
return 0;
return cap_task_kill(p, info, sig, secid);
}

static inline int security_task_wait (struct task_struct *p)
Expand Down
1 change: 1 addition & 0 deletions trunk/security/capability.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ static struct security_operations capability_ops = {
.inode_need_killpriv = cap_inode_need_killpriv,
.inode_killpriv = cap_inode_killpriv,

.task_kill = cap_task_kill,
.task_setscheduler = cap_task_setscheduler,
.task_setioprio = cap_task_setioprio,
.task_setnice = cap_task_setnice,
Expand Down
40 changes: 40 additions & 0 deletions trunk/security/commoncap.c
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,41 @@ int cap_task_setnice (struct task_struct *p, int nice)
return cap_safe_nice(p);
}

int cap_task_kill(struct task_struct *p, struct siginfo *info,
int sig, u32 secid)
{
if (info != SEND_SIG_NOINFO && (is_si_special(info) || SI_FROMKERNEL(info)))
return 0;

/*
* Running a setuid root program raises your capabilities.
* Killing your own setuid root processes was previously
* allowed.
* We must preserve legacy signal behavior in this case.
*/
if (p->uid == current->uid)
return 0;

/* sigcont is permitted within same session */
if (sig == SIGCONT && (task_session_nr(current) == task_session_nr(p)))
return 0;

if (secid)
/*
* Signal sent as a particular user.
* Capabilities are ignored. May be wrong, but it's the
* only thing we can do at the moment.
* Used only by usb drivers?
*/
return 0;
if (cap_issubset(p->cap_permitted, current->cap_permitted))
return 0;
if (capable(CAP_KILL))
return 0;

return -EPERM;
}

/*
* called from kernel/sys.c for prctl(PR_CABSET_DROP)
* done without task_capability_lock() because it introduces
Expand Down Expand Up @@ -570,6 +605,11 @@ int cap_task_setnice (struct task_struct *p, int nice)
{
return 0;
}
int cap_task_kill(struct task_struct *p, struct siginfo *info,
int sig, u32 secid)
{
return 0;
}
#endif

void cap_task_reparent_to_init (struct task_struct *p)
Expand Down
5 changes: 5 additions & 0 deletions trunk/security/smack/smack_lsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1117,6 +1117,11 @@ static int smack_task_movememory(struct task_struct *p)
static int smack_task_kill(struct task_struct *p, struct siginfo *info,
int sig, u32 secid)
{
int rc;

rc = cap_task_kill(p, info, sig, secid);
if (rc != 0)
return rc;
/*
* Special cases where signals really ought to go through
* in spite of policy. Stephen Smalley suggests it may
Expand Down

0 comments on commit 484f255

Please sign in to comment.