mirror of https://github.com/OpenIPC/firmware.git
45 lines
996 B
Diff
45 lines
996 B
Diff
diff -drupN a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
|
|
--- a/net/bluetooth/af_bluetooth.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/net/bluetooth/af_bluetooth.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -106,11 +106,40 @@ void bt_sock_unregister(int proto)
|
|
}
|
|
EXPORT_SYMBOL(bt_sock_unregister);
|
|
|
|
+#ifdef CONFIG_PARANOID_NETWORK
|
|
+static inline int current_has_bt_admin(void)
|
|
+{
|
|
+ return !current_euid();
|
|
+}
|
|
+
|
|
+static inline int current_has_bt(void)
|
|
+{
|
|
+ return current_has_bt_admin();
|
|
+}
|
|
+# else
|
|
+static inline int current_has_bt_admin(void)
|
|
+{
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+static inline int current_has_bt(void)
|
|
+{
|
|
+ return 1;
|
|
+}
|
|
+#endif
|
|
+
|
|
static int bt_sock_create(struct net *net, struct socket *sock, int proto,
|
|
int kern)
|
|
{
|
|
int err;
|
|
|
|
+ if (proto == BTPROTO_RFCOMM || proto == BTPROTO_SCO ||
|
|
+ proto == BTPROTO_L2CAP) {
|
|
+ if (!current_has_bt())
|
|
+ return -EPERM;
|
|
+ } else if (!current_has_bt_admin())
|
|
+ return -EPERM;
|
|
+
|
|
if (net != &init_net)
|
|
return -EAFNOSUPPORT;
|
|
|