diff options
author | Dave Young <hidave.darkstar@gmail.com> | 2009-08-03 04:26:16 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-03 13:24:39 -0700 |
commit | af0d3b103bcfa877343ee338de12002cd50c9ee5 (patch) | |
tree | a06b348fae8d295b17e7620d00df6701f678d449 /include/net/bluetooth/rfcomm.h | |
parent | eb4ad826419ab5b1260bc1625249114767d36bea (diff) | |
download | linux-stable-af0d3b103bcfa877343ee338de12002cd50c9ee5.tar.gz linux-stable-af0d3b103bcfa877343ee338de12002cd50c9ee5.tar.bz2 linux-stable-af0d3b103bcfa877343ee338de12002cd50c9ee5.zip |
bluetooth: rfcomm_init bug fix
rfcomm tty may be used before rfcomm_tty_driver initilized,
The problem is that now socket layer init before tty layer, if userspace
program do socket callback right here then oops will happen.
reporting in:
http://marc.info/?l=linux-bluetooth&m=124404919324542&w=2
make 3 changes:
1. remove #ifdef in rfcomm/core.c,
make it blank function when rfcomm tty not selected in rfcomm.h
2. tune the rfcomm_init error patch to ensure
tty driver initilized before rfcomm socket usage.
3. remove __exit for rfcomm_cleanup_sockets
because above change need call it in a __init function.
Reported-by: Oliver Hartkopp <oliver@hartkopp.net>
Tested-by: Oliver Hartkopp <oliver@hartkopp.net>
Signed-off-by: Dave Young <hidave.darkstar@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/bluetooth/rfcomm.h')
-rw-r--r-- | include/net/bluetooth/rfcomm.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h index 80072611d26a..c274993234e3 100644 --- a/include/net/bluetooth/rfcomm.h +++ b/include/net/bluetooth/rfcomm.h @@ -355,7 +355,17 @@ struct rfcomm_dev_list_req { }; int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); + +#ifdef CONFIG_BT_RFCOMM_TTY int rfcomm_init_ttys(void); void rfcomm_cleanup_ttys(void); - +#else +static inline int rfcomm_init_ttys(void) +{ + return 0; +} +static inline void rfcomm_cleanup_ttys(void) +{ +} +#endif #endif /* __RFCOMM_H */ |