lib: Use SOCK_CLOEXEC where needed
Calling programs might fork().. execve() and we will end
up leaking fds.
diff --git a/lib/hci.c b/lib/hci.c
index 66b2d5f..7a06dc5 100644
--- a/lib/hci.c
+++ b/lib/hci.c
@@ -817,7 +817,7 @@
int dev_id = -1;
int i, sk, err = 0;
- sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
+ sk = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI);
if (sk < 0)
return -1;
@@ -909,7 +909,7 @@
{
int dd, err, ret;
- dd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
+ dd = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI);
if (dd < 0)
return dd;
@@ -965,7 +965,7 @@
}
}
- dd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
+ dd = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI);
if (dd < 0)
return dd;
@@ -1021,7 +1021,7 @@
int dd, err;
/* Create HCI socket */
- dd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
+ dd = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI);
if (dd < 0)
return dd;
diff --git a/lib/sdp.c b/lib/sdp.c
index e1e37ed..2dac6c7 100644
--- a/lib/sdp.c
+++ b/lib/sdp.c
@@ -4536,7 +4536,7 @@
{
struct sockaddr_un sa;
- session->sock = socket(PF_UNIX, SOCK_STREAM, 0);
+ session->sock = socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
if (session->sock < 0)
return -1;
session->local = 1;
@@ -4553,19 +4553,18 @@
uint32_t flags = session->flags;
struct sockaddr_l2 sa;
int sk;
+ int sockflags = SOCK_SEQPACKET | SOCK_CLOEXEC;
- session->sock = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
+ if (flags & SDP_NON_BLOCKING)
+ sockflags |= SOCK_NONBLOCK;
+
+ session->sock = socket(PF_BLUETOOTH, sockflags, BTPROTO_L2CAP);
if (session->sock < 0)
return -1;
session->local = 0;
sk = session->sock;
- if (flags & SDP_NON_BLOCKING) {
- long arg = fcntl(sk, F_GETFL, 0);
- fcntl(sk, F_SETFL, arg | O_NONBLOCK);
- }
-
memset(&sa, 0, sizeof(sa));
sa.l2_family = AF_BLUETOOTH;