phonet: some signedness bugs
Dan Rosenberg pointed out that there were some signed comparison bugs in the phonet protocol. http://marc.info/?l=full-disclosure&m=129424528425330&w=2 The problem is that we check for array overflows but "protocol" is signed and we don't check for array underflows. If you have already have CAP_SYS_ADMIN then you could use the bugs to get root, or someone could cause an oops by mistake. Signed-off-by: Dan Carpenter <error27@gmail.com> Acked-by: Rémi Denis-Courmont <remi.denis-courmont@nokia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c599bd6b9a
commit
facb4edc1e
|
@ -107,8 +107,8 @@ struct phonet_protocol {
|
|||
int sock_type;
|
||||
};
|
||||
|
||||
int phonet_proto_register(int protocol, struct phonet_protocol *pp);
|
||||
void phonet_proto_unregister(int protocol, struct phonet_protocol *pp);
|
||||
int phonet_proto_register(unsigned int protocol, struct phonet_protocol *pp);
|
||||
void phonet_proto_unregister(unsigned int protocol, struct phonet_protocol *pp);
|
||||
|
||||
int phonet_sysctl_init(void);
|
||||
void phonet_sysctl_exit(void);
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
/* Transport protocol registration */
|
||||
static struct phonet_protocol *proto_tab[PHONET_NPROTO] __read_mostly;
|
||||
|
||||
static struct phonet_protocol *phonet_proto_get(int protocol)
|
||||
static struct phonet_protocol *phonet_proto_get(unsigned int protocol)
|
||||
{
|
||||
struct phonet_protocol *pp;
|
||||
|
||||
|
@ -458,7 +458,7 @@ static struct packet_type phonet_packet_type __read_mostly = {
|
|||
|
||||
static DEFINE_MUTEX(proto_tab_lock);
|
||||
|
||||
int __init_or_module phonet_proto_register(int protocol,
|
||||
int __init_or_module phonet_proto_register(unsigned int protocol,
|
||||
struct phonet_protocol *pp)
|
||||
{
|
||||
int err = 0;
|
||||
|
@ -481,7 +481,7 @@ int __init_or_module phonet_proto_register(int protocol,
|
|||
}
|
||||
EXPORT_SYMBOL(phonet_proto_register);
|
||||
|
||||
void phonet_proto_unregister(int protocol, struct phonet_protocol *pp)
|
||||
void phonet_proto_unregister(unsigned int protocol, struct phonet_protocol *pp)
|
||||
{
|
||||
mutex_lock(&proto_tab_lock);
|
||||
BUG_ON(proto_tab[protocol] != pp);
|
||||
|
|
Loading…
Reference in New Issue