FPII-2183: DO NOT MERGE Fix potential DoS caused by delivering signal to BT process
DO NOT MERGE Fix potential DoS caused by delivering signal to BT process
Bug: 28885210
Change-Id: I42fe6830d2f03ea12c4016a11c2eb5cea2903020
diff --git a/audio_a2dp_hw/audio_a2dp_hw.c b/audio_a2dp_hw/audio_a2dp_hw.c
index f3c6933..2083f06 100644
--- a/audio_a2dp_hw/audio_a2dp_hw.c
+++ b/audio_a2dp_hw/audio_a2dp_hw.c
@@ -306,7 +306,7 @@
ts_log("skt_read recv", len, NULL);
- if ((read = recv(fd, p, len, MSG_NOSIGNAL)) == -1)
+ if ((read = TEMP_FAILURE_RETRY(recv(fd, p, len, MSG_NOSIGNAL))) == -1)
{
ERROR("write failed with errno=%d\n", errno);
return -1;
@@ -328,12 +328,12 @@
/* poll for 500 ms */
/* send time out */
- if (poll(&pfd, 1, 500) == 0)
+ if (TEMP_FAILURE_RETRY(poll(&pfd, 1, 500)) == 0)
return 0;
ts_log("skt_write", len, NULL);
- if ((sent = send(fd, p, len, MSG_NOSIGNAL)) == -1)
+ if ((sent = TEMP_FAILURE_RETRY(send(fd, p, len, MSG_NOSIGNAL))) == -1)
{
ERROR("write failed with errno=%d\n", errno);
return -1;
@@ -364,14 +364,14 @@
static int a2dp_ctrl_receive(struct a2dp_stream_common *common, void* buffer, int length)
{
- int ret = recv(common->ctrl_fd, buffer, length, MSG_NOSIGNAL);
+ int ret = TEMP_FAILURE_RETRY(recv(common->ctrl_fd, buffer, length, MSG_NOSIGNAL));
if (ret < 0)
{
ERROR("ack failed (%s)", strerror(errno));
if (errno == EINTR)
{
/* retry again */
- ret = recv(common->ctrl_fd, buffer, length, MSG_NOSIGNAL);
+ ret = TEMP_FAILURE_RETRY(recv(common->ctrl_fd, buffer, length, MSG_NOSIGNAL));
if (ret < 0)
{
ERROR("ack failed (%s)", strerror(errno));
@@ -398,7 +398,7 @@
INFO("A2DP COMMAND %s", dump_a2dp_ctrl_event(cmd));
/* send command */
- if (send(common->ctrl_fd, &cmd, 1, MSG_NOSIGNAL) == -1)
+ if (TEMP_FAILURE_RETRY(send(common->ctrl_fd, &cmd, 1, MSG_NOSIGNAL)) == -1)
{
ERROR("cmd failed (%s)", strerror(errno));
skt_disconnect(common->ctrl_fd);
@@ -475,13 +475,13 @@
break;
ERROR("error : a2dp not ready, wait 250 ms and retry");
- usleep(250000);
+ TEMP_FAILURE_RETRY(usleep(250000));
skt_disconnect(common->ctrl_fd);
common->ctrl_fd = AUDIO_SKT_DISCONNECTED;
}
/* ctrl channel not ready, wait a bit */
- usleep(250000);
+ TEMP_FAILURE_RETRY(usleep(250000));
}
}
@@ -672,7 +672,7 @@
ERROR("emulate a2dp write delay (%d us)", us_delay);
- usleep(us_delay);
+ TEMP_FAILURE_RETRY(usleep(us_delay));
pthread_mutex_unlock(&out->common.lock);
return -1;
}
@@ -1085,7 +1085,7 @@
DEBUG("emulate a2dp read delay (%d us)", us_delay);
- usleep(us_delay);
+ TEMP_FAILURE_RETRY(usleep(us_delay));
pthread_mutex_unlock(&in->common.lock);
return -1;
}
diff --git a/btif/co/bta_fs_co.c b/btif/co/bta_fs_co.c
index e82fe5b..e9b468c 100644
--- a/btif/co/bta_fs_co.c
+++ b/btif/co/bta_fs_co.c
@@ -345,7 +345,7 @@
if ( 0==err )
{
- if ((fd = open(p_path, oflags | O_NONBLOCK, 0666)) >= 0)
+ if ((fd = TEMP_FAILURE_RETRY(open(p_path, oflags | O_NONBLOCK, 0666))) >= 0)
{
if (fstat(fd, &file_stat) == 0)
{
@@ -458,7 +458,7 @@
int err;
UNUSED(ssn);
- if ((num_read = read (fd, p_buf, nbytes)) < 0)
+ if ((num_read = TEMP_FAILURE_RETRY(read (fd, p_buf, nbytes))) < 0)
{
err = errno;
status = BTA_FS_CO_FAIL;
@@ -505,7 +505,7 @@
UNUSED(ssn);
UNUSED(app_id);
- if ((num_written = write (fd, p_buf, nbytes)) < 0)
+ if ((num_written = TEMP_FAILURE_RETRY(write (fd, p_buf, nbytes))) < 0)
{
err = errno;
status = BTA_FS_CO_FAIL;
diff --git a/btif/co/bta_hh_co.c b/btif/co/bta_hh_co.c
index 397f893..d0475eb 100644
--- a/btif/co/bta_hh_co.c
+++ b/btif/co/bta_hh_co.c
@@ -172,7 +172,7 @@
static int uhid_write(int fd, const struct uhid_event *ev)
{
ssize_t ret;
- ret = write(fd, ev, sizeof(*ev));
+ ret = TEMP_FAILURE_RETRY(write(fd, ev, sizeof(*ev)));
if (ret < 0){
int rtn = -errno;
APPL_TRACE_ERROR("%s: Cannot write to uhid:%s", __FUNCTION__, strerror(errno));
@@ -197,7 +197,7 @@
APPL_TRACE_ERROR("%s: Device not found",__FUNCTION__)
return -1;
}
- ret = read(p_dev->fd, &ev, sizeof(ev));
+ ret = TEMP_FAILURE_RETRY(read(p_dev->fd, &ev, sizeof(ev)));
if (ret == 0) {
APPL_TRACE_ERROR("%s: Read HUP on uhid-cdev %s", __FUNCTION__,
strerror(errno));
@@ -298,7 +298,7 @@
pfds[0].events = POLLIN;
while(p_dev->hh_keep_polling){
- ret = poll(pfds, 1, 50);
+ ret = TEMP_FAILURE_RETRY(poll(pfds, 1, 50));
if (ret < 0) {
APPL_TRACE_ERROR("%s: Cannot poll for fds: %s\n", __FUNCTION__, strerror(errno));
break;
@@ -387,7 +387,7 @@
__FUNCTION__, p_dev->attr_mask, p_dev->sub_class, p_dev->app_id);
if(p_dev->fd<0) {
- p_dev->fd = open(dev_path, O_RDWR | O_CLOEXEC);
+ p_dev->fd = TEMP_FAILURE_RETRY(open(dev_path, O_RDWR | O_CLOEXEC));
if (p_dev->fd < 0){
APPL_TRACE_ERROR("%s: Error: failed to open uhid, err:%s",
__FUNCTION__,strerror(errno));
@@ -414,7 +414,7 @@
btif_hh_cb.device_num++;
// This is a new device,open the uhid driver now.
- p_dev->fd = open(dev_path, O_RDWR | O_CLOEXEC);
+ p_dev->fd = TEMP_FAILURE_RETRY(open(dev_path, O_RDWR | O_CLOEXEC));
if (p_dev->fd < 0){
APPL_TRACE_ERROR("%s: Error: failed to open uhid, err:%s",
__FUNCTION__,strerror(errno));
diff --git a/btif/co/bta_hl_co.c b/btif/co/bta_hl_co.c
index 22b7c89..f16f218 100644
--- a/btif/co/bta_hl_co.c
+++ b/btif/co/bta_hl_co.c
@@ -385,7 +385,7 @@
{
BTIF_TRACE_DEBUG("app_idx=%d mcl_idx=0x%x mdl_idx=0x%x data_size=%d",
app_idx, mcl_idx, mdl_idx, data_size);
- r = send(p_dcb->p_scb->socket_id[1], p_dcb->p_rx_pkt, data_size, 0);
+ r = TEMP_FAILURE_RETRY(send(p_dcb->p_scb->socket_id[1], p_dcb->p_rx_pkt, data_size, 0));
if (r == data_size)
{
diff --git a/btif/src/btif_config_util.cpp b/btif/src/btif_config_util.cpp
index d604af0..2e76ba2 100644
--- a/btif/src/btif_config_util.cpp
+++ b/btif/src/btif_config_util.cpp
@@ -404,7 +404,7 @@
st.st_size = 0;
int fd;
//debug("in");
- if((fd = open(pathname, O_RDONLY)) >= 0)
+ if((fd = TEMP_FAILURE_RETRY(open(pathname, O_RDONLY))) >= 0)
{
//debug("fd:%d", fd);
if(fstat(fd, &st) == 0 && st.st_size)
diff --git a/btif/src/btif_core.c b/btif/src/btif_core.c
index 8e8d763..c209af2 100755
--- a/btif/src/btif_core.c
+++ b/btif/src/btif_core.c
@@ -395,10 +395,10 @@
BTIF_TRACE_DEBUG("local bdaddr is stored in %s", val);
- if ((addr_fd = open(val, O_RDONLY)) != -1)
+ if ((addr_fd = TEMP_FAILURE_RETRY(open(val, O_RDONLY))) != -1)
{
memset(val, 0, sizeof(val));
- read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN);
+ TEMP_FAILURE_RETRY(read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN));
str2bd(val, local_addr);
/* If this is not a reserved/special bda, then use it */
if (memcmp(local_addr->address, null_bdaddr, BD_ADDR_LEN) != 0)
diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c
index 5999025..19adc22 100644
--- a/btif/src/btif_dm.c
+++ b/btif/src/btif_dm.c
@@ -2078,7 +2078,7 @@
BTIF_TRACE_ERROR("Received H/W Error. ");
/* Flush storage data */
btif_config_flush();
- usleep(100000); /* 100milliseconds */
+ TEMP_FAILURE_RETRY(usleep(100000)); /* 100milliseconds */
/* Killing the process to force a restart as part of fault tolerance */
kill(getpid(), SIGKILL);
break;
diff --git a/btif/src/btif_hh.c b/btif/src/btif_hh.c
index 0dabbc5..ca69c3b 100644
--- a/btif/src/btif_hh.c
+++ b/btif/src/btif_hh.c
@@ -238,7 +238,7 @@
BTIF_TRACE_DEBUG("%s: %x %x %x", __FUNCTION__,
hidreport[6], hidreport[7], hidreport[8]);
bta_hh_co_write(fd , hidreport, sizeof(hidreport));
- usleep(200000);
+ TEMP_FAILURE_RETRY(usleep(200000));
memset(hidreport,0,9);
hidreport[0]=1;
BTIF_TRACE_DEBUG("Writing hidreport #2 to os: "\
@@ -366,7 +366,7 @@
BTIF_TRACE_DEBUG("%s: Sending hid report to kernel "\
"indicating lock key state 0x%x",__FUNCTION__,
keylockstates);
- usleep(200000);
+ TEMP_FAILURE_RETRY(usleep(200000));
toggle_os_keylockstates(p_dev->fd, keylockstates);
}
else
diff --git a/btif/src/btif_hl.c b/btif/src/btif_hl.c
index 9fa08bb..d95776e 100644
--- a/btif/src/btif_hl.c
+++ b/btif/src/btif_hl.c
@@ -4928,7 +4928,7 @@
static inline int btif_hl_select_wakeup(void){
char sig_on = btif_hl_signal_select_wakeup;
BTIF_TRACE_DEBUG("btif_hl_select_wakeup");
- return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
+ return TEMP_FAILURE_RETRY(send(signal_fds[1], &sig_on, sizeof(sig_on), 0));
}
/*******************************************************************************
@@ -4943,7 +4943,7 @@
static inline int btif_hl_select_close_connected(void){
char sig_on = btif_hl_signal_select_close_connected;
BTIF_TRACE_DEBUG("btif_hl_select_close_connected");
- return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
+ return TEMP_FAILURE_RETRY(send(signal_fds[1], &sig_on, sizeof(sig_on), 0));
}
/*******************************************************************************
@@ -4960,7 +4960,7 @@
int result = 0;
char sig_on = btif_hl_signal_select_exit;
BTIF_TRACE_DEBUG("btif_hl_signal_select_exit");
- result = send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
+ result = TEMP_FAILURE_RETRY(send(signal_fds[1], &sig_on, sizeof(sig_on), 0));
if (btif_is_enabled())
{
/* Wait for the select_thread_id to exit if BT is still enabled
@@ -4986,7 +4986,7 @@
char sig_recv = 0;
BTIF_TRACE_DEBUG("btif_hl_select_wake_reset");
- recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
+ TEMP_FAILURE_RETRY(recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL));
return(int)sig_recv;
}
/*******************************************************************************
@@ -5047,7 +5047,7 @@
BTIF_TRACE_DEBUG("set curr_set = org_set ");
curr_set = org_set;
max_curr_s = max_org_s;
- int ret = select((max_curr_s + 1), &curr_set, NULL, NULL, NULL);
+ int ret = TEMP_FAILURE_RETRY(select((max_curr_s + 1), &curr_set, NULL, NULL, NULL));
BTIF_TRACE_DEBUG("select unblocked ret=%d", ret);
if (ret == -1)
{
diff --git a/btif/src/btif_media_task.c b/btif/src/btif_media_task.c
index e828dab..09c2980 100644
--- a/btif/src/btif_media_task.c
+++ b/btif/src/btif_media_task.c
@@ -862,7 +862,7 @@
/* wait for task to come up to sure we are able to send messages to it */
while (media_task_running == MEDIA_TASK_STATE_OFF)
- usleep(10);
+ TEMP_FAILURE_RETRY(usleep(10));
APPL_TRACE_EVENT("## A2DP MEDIA TASK STARTED ##");
diff --git a/btif/src/btif_pan.c b/btif/src/btif_pan.c
index 2214d51..44d6e95 100644
--- a/btif/src/btif_pan.c
+++ b/btif/src/btif_pan.c
@@ -314,7 +314,7 @@
//set mac addr
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, devname, IFNAMSIZ - 1);
- err = ioctl(sk, SIOCGIFHWADDR, &ifr);
+ err = TEMP_FAILURE_RETRY(ioctl(sk, SIOCGIFHWADDR, &ifr));
if(err < 0)
{
BTIF_TRACE_ERROR("Could not get network hardware for interface:%s, errno:%s", devname, strerror(errno));
@@ -340,7 +340,7 @@
ifr.ifr_hwaddr.sa_data[0] &= ~0x01;
}
- err = ioctl(sk, SIOCSIFHWADDR, (caddr_t)&ifr);
+ err = TEMP_FAILURE_RETRY(ioctl(sk, SIOCSIFHWADDR, (caddr_t)&ifr));
if (err < 0) {
BTIF_TRACE_ERROR("Could not set bt address for interface:%s, errno:%s", devname, strerror(errno));
@@ -355,7 +355,7 @@
ifr.ifr_flags |= IFF_UP;
ifr.ifr_flags |= IFF_MULTICAST;
- err = ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr);
+ err = TEMP_FAILURE_RETRY(ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr));
if (err < 0) {
@@ -380,7 +380,7 @@
ifr.ifr_flags &= ~IFF_UP;
- err = ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr);
+ err = TEMP_FAILURE_RETRY(ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr));
close(sk);
@@ -407,7 +407,7 @@
/* open the clone device */
//system("insmod /system/lib/modules/tun.ko");
- if( (fd = open(clonedev, O_RDWR)) < 0 ) {
+ if( (fd = TEMP_FAILURE_RETRY(open(clonedev, O_RDWR))) < 0 ) {
BTIF_TRACE_DEBUG("could not open %s, err:%d", clonedev, errno);
return fd;
@@ -419,7 +419,7 @@
strncpy(ifr.ifr_name, TAP_IF_NAME, IFNAMSIZ);
/* try to create the device */
- if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 )//|| tap_setup_ip(TAP_IF_NAME) == FALSE)
+ if( (err = TEMP_FAILURE_RETRY(ioctl(fd, TUNSETIFF, (void *) &ifr))) < 0 )//|| tap_setup_ip(TAP_IF_NAME) == FALSE)
{
BTIF_TRACE_DEBUG("ioctl error:%d, errno:%s", err, strerror(errno));
close(fd);
@@ -428,8 +428,8 @@
BTM_GetLocalDeviceAddr (local_addr);
if(tap_if_up(TAP_IF_NAME, local_addr) == 0)
{
- int flags = fcntl(fd, F_GETFL, 0);
- fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ int flags = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFL, 0));
+ TEMP_FAILURE_RETRY(fcntl(fd, F_SETFL, flags | O_NONBLOCK));
return fd;
}
BTIF_TRACE_ERROR("can not bring up tap interface:%s", TAP_IF_NAME);
@@ -463,7 +463,7 @@
/* Send data to network interface */
//btnet_send(btpan_cb.conn[i].sock.sock, &buffer, (len + sizeof(tETH_HDR)));
//dump_bin("packet to network", packet, len + sizeof(tETH_HDR));
- int ret = write(tap_fd, packet, len + sizeof(tETH_HDR));
+ int ret = TEMP_FAILURE_RETRY(write(tap_fd, packet, len + sizeof(tETH_HDR)));
BTIF_TRACE_DEBUG("ret:%d", ret);
return ret;
}
@@ -722,7 +722,7 @@
// We save it in the congest_packet right away in case we can't deliver it in this
// attempt.
if (!btpan_cb.congest_packet_size) {
- ssize_t ret = read(fd, btpan_cb.congest_packet, sizeof(btpan_cb.congest_packet));
+ ssize_t ret = TEMP_FAILURE_RETRY(read(fd, btpan_cb.congest_packet, sizeof(btpan_cb.congest_packet)));
switch (ret) {
case -1:
BTIF_TRACE_ERROR("%s unable to read from driver: %s", __func__, strerror(errno));
@@ -766,7 +766,7 @@
ufd.fd = fd;
ufd.events = POLLIN;
ufd.revents = 0;
- if(poll(&ufd, 1, 0) <= 0 || IS_EXCEPTION(ufd.revents))
+ if(TEMP_FAILURE_RETRY(poll(&ufd, 1, 0)) <= 0 || IS_EXCEPTION(ufd.revents))
break;
}
//add fd back to monitor thread
diff --git a/btif/src/btif_rc.c b/btif/src/btif_rc.c
index 04fec83..46a54a8 100644
--- a/btif/src/btif_rc.c
+++ b/btif/src/btif_rc.c
@@ -281,7 +281,7 @@
event.code = code;
event.value = value;
- return write(fd, &event, sizeof(event));
+ return TEMP_FAILURE_RETRY(write(fd, &event, sizeof(event)));
}
void send_key (int fd, uint16_t key, int pressed)
@@ -320,7 +320,7 @@
for(x=0; x < MAX_UINPUT_PATHS; x++)
{
- fd = open(uinput_dev_path[x], O_RDWR);
+ fd = TEMP_FAILURE_RETRY(open(uinput_dev_path[x], O_RDWR));
if (fd < 0)
continue;
break;
@@ -338,23 +338,23 @@
dev.id.product = 0x0000;
dev.id.version = 0x0000;
- if (write(fd, &dev, sizeof(dev)) < 0) {
+ if (TEMP_FAILURE_RETRY(write(fd, &dev, sizeof(dev))) < 0) {
BTIF_TRACE_ERROR("%s Unable to write device information", __FUNCTION__);
close(fd);
return -1;
}
- ioctl(fd, UI_SET_EVBIT, EV_KEY);
- ioctl(fd, UI_SET_EVBIT, EV_REL);
- ioctl(fd, UI_SET_EVBIT, EV_SYN);
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_EVBIT, EV_KEY));
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_EVBIT, EV_REL));
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_EVBIT, EV_SYN));
for (x = 0; key_map[x].name != NULL; x++)
- ioctl(fd, UI_SET_KEYBIT, key_map[x].mapped_id);
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_KEYBIT, key_map[x].mapped_id));
for(x = 0; x < KEY_MAX; x++)
- ioctl(fd, UI_SET_KEYBIT, x);
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_KEYBIT, x));
- if (ioctl(fd, UI_DEV_CREATE, NULL) < 0) {
+ if (TEMP_FAILURE_RETRY(ioctl(fd, UI_DEV_CREATE, NULL)) < 0) {
BTIF_TRACE_ERROR("%s Unable to create uinput device", __FUNCTION__);
close(fd);
return -1;
@@ -382,7 +382,7 @@
{
BTIF_TRACE_DEBUG("%s", __FUNCTION__);
if (uinput_fd > 0) {
- ioctl(uinput_fd, UI_DEV_DESTROY);
+ TEMP_FAILURE_RETRY(ioctl(uinput_fd, UI_DEV_DESTROY));
close(uinput_fd);
uinput_fd = -1;
diff --git a/btif/src/btif_sock_rfc.c b/btif/src/btif_sock_rfc.c
index d29f94d..a3e4398 100644
--- a/btif/src/btif_sock_rfc.c
+++ b/btif/src/btif_sock_rfc.c
@@ -993,7 +993,7 @@
{
if(p_buf->len == 0)
return SENT_ALL;
- int sent = send(fd, (UINT8 *)(p_buf + 1) + p_buf->offset, p_buf->len, MSG_DONTWAIT);
+ int sent = TEMP_FAILURE_RETRY(send(fd, (UINT8 *)(p_buf + 1) + p_buf->offset, p_buf->len, MSG_DONTWAIT));
if(sent == p_buf->len)
return SENT_ALL;
@@ -1066,7 +1066,7 @@
int size = 0;
//make sure there's data pending in case the peer closed the socket
if(!(flags & SOCK_THREAD_FD_EXCEPTION) ||
- (ioctl(rs->fd, FIONREAD, &size) == 0 && size))
+ (TEMP_FAILURE_RETRY(ioctl(rs->fd, FIONREAD, &size)) == 0 && size))
{
int rfc_handle = rs->rfc_handle;
UINT32 rs_id = rs->id;
@@ -1098,7 +1098,7 @@
if(need_close || (flags & SOCK_THREAD_FD_EXCEPTION))
{
int size = 0;
- if(need_close || ioctl(rs->fd, FIONREAD, &size) != 0 || size == 0 )
+ if(need_close || TEMP_FAILURE_RETRY(ioctl(rs->fd, FIONREAD, &size)) != 0 || size == 0 )
{
//cleanup when no data pending
APPL_TRACE_DEBUG("SOCK_THREAD_FD_EXCEPTION, cleanup, flags:%x, need_close:%d, pending size:%d",
@@ -1158,7 +1158,7 @@
rfc_slot_t* rs = find_rfc_slot_by_id(id);
if(rs)
{
- if(ioctl(rs->fd, FIONREAD, size) == 0)
+ if(TEMP_FAILURE_RETRY(ioctl(rs->fd, FIONREAD, size)) == 0)
{
APPL_TRACE_DEBUG("ioctl read avaiable size:%d, fd:%d", *size, rs->fd);
ret = TRUE;
@@ -1181,7 +1181,7 @@
rfc_slot_t* rs = find_rfc_slot_by_id(id);
if(rs)
{
- int received = recv(rs->fd, buf, size, 0);
+ int received = TEMP_FAILURE_RETRY(recv(rs->fd, buf, size, 0));
if(received == size)
ret = TRUE;
else
diff --git a/btif/src/btif_sock_thread.c b/btif/src/btif_sock_thread.c
index fc19824..efd0c28 100644
--- a/btif/src/btif_sock_thread.c
+++ b/btif/src/btif_sock_thread.c
@@ -116,12 +116,12 @@
static inline void set_socket_blocking(int s, int blocking)
{
int opts;
- opts = fcntl(s, F_GETFL);
+ opts = TEMP_FAILURE_RETRY(fcntl(s, F_GETFL));
if (opts<0) APPL_TRACE_ERROR("set blocking (%s)", strerror(errno));
if(blocking)
opts &= ~O_NONBLOCK;
else opts |= O_NONBLOCK;
- fcntl(s, F_SETFL, opts);
+ TEMP_FAILURE_RETRY(fcntl(s, F_SETFL, opts));
}
static inline int create_server_socket(const char* name)
@@ -158,7 +158,7 @@
{
struct sockaddr_un client_address;
socklen_t clen;
- int fd = accept(s, (struct sockaddr*)&client_address, &clen);
+ int fd = TEMP_FAILURE_RETRY(accept(s, (struct sockaddr*)&client_address, &clen));
APPL_TRACE_DEBUG("accepted fd:%d for server fd:%d", fd, s);
return fd;
}
@@ -308,7 +308,7 @@
}
sock_cmd_t cmd = {CMD_ADD_FD, fd, type, flags, user_id};
APPL_TRACE_DEBUG("adding fd:%d, flags:0x%x", fd, flags);
- return send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0) == sizeof(cmd);
+ return TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0)) == sizeof(cmd);
}
int btsock_thread_post_cmd(int h, int type, const unsigned char* data, int size, uint32_t user_id)
{
@@ -341,7 +341,7 @@
return FALSE;
}
}
- return send(ts[h].cmd_fdw, cmd_send, size_send, 0) == size_send;
+ return TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, cmd_send, size_send, 0)) == size_send;
}
int btsock_thread_wakeup(int h)
{
@@ -356,7 +356,7 @@
return FALSE;
}
sock_cmd_t cmd = {CMD_WAKEUP, 0, 0, 0, 0};
- return send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0) == sizeof(cmd);
+ return TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0)) == sizeof(cmd);
}
int btsock_thread_exit(int h)
{
@@ -371,7 +371,7 @@
return FALSE;
}
sock_cmd_t cmd = {CMD_EXIT, 0, 0, 0, 0};
- if(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0) == sizeof(cmd))
+ if(TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0)) == sizeof(cmd))
{
pthread_join(ts[h].thread_id, 0);
lock_slot(&thread_slot_lock);
@@ -466,7 +466,7 @@
{
sock_cmd_t cmd = {-1, 0, 0, 0, 0};
int fd = ts[h].cmd_fdr;
- if(recv(fd, &cmd, sizeof(cmd), MSG_WAITALL) != sizeof(cmd))
+ if(TEMP_FAILURE_RETRY(recv(fd, &cmd, sizeof(cmd), MSG_WAITALL)) != sizeof(cmd))
{
APPL_TRACE_ERROR("recv cmd errno:%d", errno);
return FALSE;
@@ -563,7 +563,7 @@
for(;;)
{
prepare_poll_fds(h, pfds);
- int ret = poll(pfds, ts[h].poll_count, -1);
+ int ret = TEMP_FAILURE_RETRY(poll(pfds, ts[h].poll_count, -1));
if(ret == -1)
{
APPL_TRACE_ERROR("poll ret -1, exit the thread, errno:%d, err:%s", errno, strerror(errno));
diff --git a/btif/src/btif_sock_util.c b/btif/src/btif_sock_util.c
index 8e016e2..5fe7d95 100644
--- a/btif/src/btif_sock_util.c
+++ b/btif/src/btif_sock_util.c
@@ -73,7 +73,7 @@
int ret;
while(s)
{
- do ret = send(sock_fd, buf, s, 0);
+ do ret = TEMP_FAILURE_RETRY(send(sock_fd, buf, s, 0));
while(ret < 0 && errno == EINTR);
if(ret <= 0)
{
@@ -91,7 +91,7 @@
int ret = -1;
while(r)
{
- do ret = recv(sock_fd, buf, r, MSG_WAITALL);
+ do ret = TEMP_FAILURE_RETRY(recv(sock_fd, buf, r, MSG_WAITALL));
while(ret < 0 && errno == EINTR);
if(ret <= 0)
{
@@ -139,7 +139,7 @@
msg.msg_iovlen = 1;
do {
- ret = sendmsg(sock_fd, &msg, MSG_NOSIGNAL);
+ ret = TEMP_FAILURE_RETRY(sendmsg(sock_fd, &msg, MSG_NOSIGNAL));
} while (ret < 0 && errno == EINTR);
if (ret < 0) {
diff --git a/gki/ulinux/gki_ulinux.c b/gki/ulinux/gki_ulinux.c
index 26a9e0b..2ff5926 100644
--- a/gki/ulinux/gki_ulinux.c
+++ b/gki/ulinux/gki_ulinux.c
@@ -537,7 +537,7 @@
i = 0;
while ((gki_cb.com.OSWaitEvt[task_id] != 0) && (++i < 10))
- usleep(100 * 1000);
+ TEMP_FAILURE_RETRY(usleep(100 * 1000));
#else
result = pthread_join( gki_cb.os.thread_id[task_id], NULL );
if ( result < 0 )
@@ -658,7 +658,7 @@
i = 0;
while ((gki_cb.com.OSWaitEvt[task_id - 1] != 0) && (++i < 10))
- usleep(100 * 1000);
+ TEMP_FAILURE_RETRY(usleep(100 * 1000));
#else
result = pthread_join( gki_cb.os.thread_id[task_id-1], NULL );
@@ -907,7 +907,7 @@
/* [u]sleep can't be used because it uses SIGALRM */
do {
- err = nanosleep(&delay, &delay);
+ err = TEMP_FAILURE_RETRY(nanosleep(&delay, &delay));
} while (err < 0 && errno ==EINTR);
/* Check if task was killed while sleeping */
diff --git a/hci/src/btsnoop.c b/hci/src/btsnoop.c
index e31af35..1fc350a 100644
--- a/hci/src/btsnoop.c
+++ b/hci/src/btsnoop.c
@@ -66,7 +66,7 @@
static void btsnoop_write(const void *data, size_t length) {
if (hci_btsnoop_fd != -1)
- write(hci_btsnoop_fd, data, length);
+ TEMP_FAILURE_RETRY(write(hci_btsnoop_fd, data, length));
btsnoop_net_write(data, length);
}
@@ -139,16 +139,16 @@
rename(p_path, fname_backup);
}
- hci_btsnoop_fd = open(p_path,
+ hci_btsnoop_fd = TEMP_FAILURE_RETRY(open(p_path,
O_WRONLY | O_CREAT | O_TRUNC,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH));
if (hci_btsnoop_fd == -1) {
ALOGE("%s unable to open '%s': %s", __func__, p_path, strerror(errno));
return;
}
- write(hci_btsnoop_fd, "btsnoop\0\0\0\0\1\0\0\x3\xea", 16);
+ TEMP_FAILURE_RETRY(write(hci_btsnoop_fd, "btsnoop\0\0\0\0\1\0\0\x3\xea", 16));
}
void btsnoop_close(void) {
diff --git a/hci/src/btsnoop_net.c b/hci/src/btsnoop_net.c
index adaddcd..388c91d 100644
--- a/hci/src/btsnoop_net.c
+++ b/hci/src/btsnoop_net.c
@@ -65,7 +65,7 @@
void btsnoop_net_write(const void *data, size_t length) {
pthread_mutex_lock(&client_socket_lock_);
if (client_socket_ != -1) {
- if (send(client_socket_, data, length, 0) == -1 && errno == ECONNRESET) {
+ if (TEMP_FAILURE_RETRY(send(client_socket_, data, length, 0)) == -1 && errno == ECONNRESET) {
safe_close_(&client_socket_);
}
}
@@ -104,7 +104,7 @@
for (;;) {
ALOGD("waiting for client connection");
- int client_socket = accept(listen_socket_, NULL, NULL);
+ int client_socket = TEMP_FAILURE_RETRY(accept(listen_socket_, NULL, NULL));
if (client_socket == -1) {
if (errno == EINVAL || errno == EBADF) {
break;
@@ -119,7 +119,7 @@
pthread_mutex_lock(&client_socket_lock_);
safe_close_(&client_socket_);
client_socket_ = client_socket;
- send(client_socket_, "btsnoop\0\0\0\0\1\0\0\x3\xea", 16, 0);
+ TEMP_FAILURE_RETRY(send(client_socket_, "btsnoop\0\0\0\0\1\0\0\x3\xea", 16, 0));
pthread_mutex_unlock(&client_socket_lock_);
}
diff --git a/hci/src/userial.c b/hci/src/userial.c
index 21cd279..26f814f 100644
--- a/hci/src/userial.c
+++ b/hci/src/userial.c
@@ -156,7 +156,7 @@
fd_max = fd_max > fd ? fd_max : fd;
/* Do the select */
- n = select(fd_max+1, &input, NULL, NULL, NULL);
+ n = TEMP_FAILURE_RETRY(select(fd_max+1, &input, NULL, NULL, NULL));
if(is_event_available(&input))
{
uint64_t event = read_event();
@@ -172,7 +172,7 @@
/* We might have input */
if (FD_ISSET(fd, &input))
{
- ret = read(fd, pbuf, (size_t)len);
+ ret = TEMP_FAILURE_RETRY(read(fd, pbuf, (size_t)len));
if (0 == ret)
ALOGW( "read() returned 0!" );
@@ -366,7 +366,7 @@
uint16_t total = 0;
while (len) {
- ssize_t ret = write(userial_cb.fd, p_data + total, len);
+ ssize_t ret = TEMP_FAILURE_RETRY(write(userial_cb.fd, p_data + total, len));
switch (ret) {
case -1:
ALOGE("%s error writing to serial port: %s", __func__, strerror(errno));
diff --git a/hci/src/userial_mct.c b/hci/src/userial_mct.c
index 2a56ae9..6e15233 100644
--- a/hci/src/userial_mct.c
+++ b/hci/src/userial_mct.c
@@ -126,12 +126,12 @@
}
static inline int send_wakeup_signal(char sig_cmd)
{
- return send(signal_fds[1], &sig_cmd, sizeof(sig_cmd), 0);
+ return TEMP_FAILURE_RETRY(send(signal_fds[1], &sig_cmd, sizeof(sig_cmd), 0));
}
static inline char reset_signal()
{
char sig_recv = -1;
- recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
+ TEMP_FAILURE_RETRY(recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL));
return sig_recv;
}
static inline int is_signaled(fd_set* set)
@@ -176,7 +176,7 @@
/* Do the select */
n = 0;
- n = select(fd_max+1, &input, NULL, NULL, NULL);
+ n = TEMP_FAILURE_RETRY(select(fd_max+1, &input, NULL, NULL, NULL));
if(is_signaled(&input))
{
reason = reset_signal();
@@ -366,7 +366,7 @@
int ret = -1;
int ch_idx = (msg_id == MSG_HC_TO_STACK_HCI_EVT) ? CH_EVT : CH_ACL_IN;
- ret = read(userial_cb.fd[ch_idx], p_buffer, (size_t)len);
+ ret = TEMP_FAILURE_RETRY(read(userial_cb.fd[ch_idx], p_buffer, (size_t)len));
if (ret <= 0)
ALOGW( "userial_read: read() returned %d!", ret);
@@ -390,7 +390,7 @@
while(len != 0)
{
- ret = write(userial_cb.fd[ch_idx], p_data+total, len);
+ ret = TEMP_FAILURE_RETRY(write(userial_cb.fd[ch_idx], p_data+total, len));
total += ret;
len -= ret;
}
diff --git a/hci/src/utils.c b/hci/src/utils.c
index 9524b4c..0487fa1 100644
--- a/hci/src/utils.c
+++ b/hci/src/utils.c
@@ -28,6 +28,7 @@
#include <pthread.h>
#include <utils/Log.h>
#include <time.h>
+#include <unistd.h>
#include "bt_hci_bdroid.h"
#include "utils.h"
@@ -275,7 +276,7 @@
ALOGE("utils_delay : %d **", timeout);
/* [u]sleep can't be used because it uses SIGALRM */
do {
- err = nanosleep(&delay, &delay);
+ err = TEMP_FAILURE_RETRY(nanosleep(&delay, &delay));
} while (err < 0 && errno ==EINTR);
}
diff --git a/main/bte_logmsg.c b/main/bte_logmsg.c
index 2afd13a..05787b6 100644
--- a/main/bte_logmsg.c
+++ b/main/bte_logmsg.c
@@ -273,8 +273,8 @@
LOGI0(bt_layer_tags[trace_layer], buffer);
#endif
#else
- write(2, buffer, strlen(buffer));
- write(2, "\n", 1);
+ TEMP_FAILURE_RETRY(write(2, buffer, strlen(buffer)));
+ TEMP_FAILURE_RETRY(write(2, "\n", 1));
#endif
}
@@ -305,8 +305,8 @@
#if (defined(ANDROID_USE_LOGCAT) && (ANDROID_USE_LOGCAT==TRUE))
LOGI0(bt_layer_tags[trace_layer], buffer);
#else
- write(2, buffer, strlen(buffer));
- write(2, "\n", 1);
+ TEMP_FAILURE_RETRY(write(2, buffer, strlen(buffer)));
+ TEMP_FAILURE_RETRY(write(2, "\n", 1));
#endif
}
diff --git a/osi/src/reactor.c b/osi/src/reactor.c
index e7a3d55..3c6bca1 100644
--- a/osi/src/reactor.c
+++ b/osi/src/reactor.c
@@ -163,7 +163,7 @@
int ret;
do {
- ret = select(max_fd + 1, &read_set, &write_set, NULL, tv);
+ ret = TEMP_FAILURE_RETRY(select(max_fd + 1, &read_set, &write_set, NULL, tv));
} while (ret == -1 && errno == EINTR);
if (ret == -1) {
diff --git a/osi/src/semaphore.c b/osi/src/semaphore.c
index c1d038a..9413569 100644
--- a/osi/src/semaphore.c
+++ b/osi/src/semaphore.c
@@ -67,12 +67,12 @@
assert(semaphore != NULL);
assert(semaphore->fd != -1);
- int flags = fcntl(semaphore->fd, F_GETFL);
+ int flags = TEMP_FAILURE_RETRY(fcntl(semaphore->fd, F_GETFL));
if (flags == -1) {
ALOGE("%s unable to get flags for semaphore fd: %s", __func__, strerror(errno));
return false;
}
- if (fcntl(semaphore->fd, F_SETFL, flags | O_NONBLOCK) == -1) {
+ if (TEMP_FAILURE_RETRY(fcntl(semaphore->fd, F_SETFL, flags | O_NONBLOCK)) == -1) {
ALOGE("%s unable to set O_NONBLOCK for semaphore fd: %s", __func__, strerror(errno));
return false;
}
@@ -81,7 +81,7 @@
if (eventfd_read(semaphore->fd, &value) == -1)
return false;
- if (fcntl(semaphore->fd, F_SETFL, flags) == -1)
+ if (TEMP_FAILURE_RETRY(fcntl(semaphore->fd, F_SETFL, flags)) == -1)
ALOGE("%s unable to resetore flags for semaphore fd: %s", __func__, strerror(errno));
return true;
}
diff --git a/osi/test/alarm_test.cpp b/osi/test/alarm_test.cpp
index d08cf6d..c4caddc 100644
--- a/osi/test/alarm_test.cpp
+++ b/osi/test/alarm_test.cpp
@@ -20,7 +20,7 @@
static const uint64_t EPSILON_MS = 5;
static void msleep(uint64_t ms) {
- usleep(ms * 1000);
+ TEMP_FAILURE_RETRY(usleep(ms * 1000));
}
static void timer_callback(void *) {
diff --git a/osi/test/reactor_test.cpp b/osi/test/reactor_test.cpp
index 4a9fb21..ce00468 100644
--- a/osi/test/reactor_test.cpp
+++ b/osi/test/reactor_test.cpp
@@ -79,7 +79,7 @@
reactor_t *reactor = reactor_new();
spawn_reactor_thread(reactor);
- usleep(50 * 1000);
+ TEMP_FAILURE_RETRY(usleep(50 * 1000));
EXPECT_TRUE(thread_running);
reactor_stop(reactor);
diff --git a/stack/btm/btm_inq.c b/stack/btm/btm_inq.c
index ae3d014..d178f32 100644
--- a/stack/btm/btm_inq.c
+++ b/stack/btm/btm_inq.c
@@ -3435,4 +3435,3 @@
}
}
#endif
-
diff --git a/stack/btu/btu_hcif.c b/stack/btu/btu_hcif.c
index 8bf95a1..13ec4cd 100644
--- a/stack/btu/btu_hcif.c
+++ b/stack/btu/btu_hcif.c
@@ -1707,7 +1707,7 @@
HCI_TRACE_ERROR("Num consecutive HCI Cmd tout =%d Restarting BT process",num_hci_cmds_timed_out);
bte_ssr_cleanup();
- usleep(20000); /* 20 milliseconds */
+ TEMP_FAILURE_RETRY(usleep(10000)); /* 10 milliseconds */
/* Killing the process to force a restart as part of fault tolerance */
kill(getpid(), SIGKILL);
}
@@ -2371,4 +2371,3 @@
#endif /* BLE_LLT_INCLUDED */
#endif /* BLE_INCLUDED */
-
diff --git a/test/suite/support/callbacks.h b/test/suite/support/callbacks.h
index 102e13f..f7627fd 100644
--- a/test/suite/support/callbacks.h
+++ b/test/suite/support/callbacks.h
@@ -21,11 +21,12 @@
#include "base.h"
#include <semaphore.h>
+#include <unistd.h>
#define WAIT(callback) \
do { \
sem_t *semaphore = callbacks_get_semaphore(#callback); \
- sem_wait(semaphore); \
+ TEMP_FAILURE_RETRY(sem_wait(semaphore)); \
} while (0)
#define CALL_AND_WAIT(expression, callback) \
@@ -33,7 +34,7 @@
sem_t *semaphore = callbacks_get_semaphore(#callback); \
while (!sem_trywait(semaphore)); \
expression; \
- sem_wait(semaphore); \
+ TEMP_FAILURE_RETRY(sem_wait(semaphore)); \
} while(0)
// To be called from every exit point of the callback. This macro
diff --git a/udrv/ulinux/uipc.c b/udrv/ulinux/uipc.c
index 62864e8..895d1a3 100644
--- a/udrv/ulinux/uipc.c
+++ b/udrv/ulinux/uipc.c
@@ -183,7 +183,7 @@
pfd.fd = sfd;
pfd.events = POLLIN;
- if (poll(&pfd, 1, 0) == 0)
+ if (TEMP_FAILURE_RETRY(poll(&pfd, 1, 0)) == 0)
{
BTIF_TRACE_EVENT("accept poll timeout");
return -1;
@@ -191,7 +191,7 @@
//BTIF_TRACE_EVENT("poll revents 0x%x", pfd.revents);
- if ((fd = accept(sfd, (struct sockaddr *)&remote, &len)) == -1)
+ if ((fd = TEMP_FAILURE_RETRY(accept(sfd, (struct sockaddr *)&remote, &len))) == -1)
{
BTIF_TRACE_ERROR("sock accept failed (%s)", strerror(errno));
return -1;
@@ -328,7 +328,7 @@
{
char sig_recv = 0;
//BTIF_TRACE_EVENT("UIPC INTERRUPT");
- recv(uipc_main.signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
+ TEMP_FAILURE_RETRY(recv(uipc_main.signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL));
}
}
@@ -336,7 +336,7 @@
{
char sig_on = 1;
BTIF_TRACE_EVENT("UIPC SEND WAKE UP");
- send(uipc_main.signal_fds[1], &sig_on, sizeof(sig_on), 0);
+ TEMP_FAILURE_RETRY(send(uipc_main.signal_fds[1], &sig_on, sizeof(sig_on), 0));
}
static int uipc_setup_server_locked(tUIPC_CH_ID ch_id, char *name, tUIPC_RCV_CBACK *cback)
@@ -393,7 +393,7 @@
while (1)
{
- ret = poll(&pfd, 1, 1);
+ ret = TEMP_FAILURE_RETRY(poll(&pfd, 1, 1));
BTIF_TRACE_VERBOSE("%s() - polling fd %d, revents: 0x%x, ret %d",
__FUNCTION__, pfd.fd, pfd.revents, ret);
@@ -421,7 +421,7 @@
BTIF_TRACE_EVENT("uipc_flush_ch_locked: buf alloc issue %d", ret);
return;
}
- ret = read(pfd.fd, buf, size);
+ ret = TEMP_FAILURE_RETRY(read(pfd.fd, buf, size));
BTIF_TRACE_EVENT("Flushed %d bytes", ret);
free(buf);
buf = NULL;
@@ -516,7 +516,7 @@
{
uipc_main.read_set = uipc_main.active_set;
- result = select(uipc_main.max_fd+1, &uipc_main.read_set, NULL, NULL, NULL);
+ result = TEMP_FAILURE_RETRY(select(uipc_main.max_fd+1, &uipc_main.read_set, NULL, NULL, NULL));
if (result == 0)
{
@@ -727,7 +727,7 @@
UIPC_LOCK();
- if (write(uipc_main.ch[ch_id].fd, p_buf, msglen) < 0)
+ if (TEMP_FAILURE_RETRY(write(uipc_main.ch[ch_id].fd, p_buf, msglen)) < 0)
{
BTIF_TRACE_ERROR("failed to write (%s)", strerror(errno));
}
@@ -796,7 +796,7 @@
/* make sure there is data prior to attempting read to avoid blocking
a read for more than poll timeout */
- if (poll(&pfd, 1, uipc_main.ch[ch_id].read_poll_tmo_ms) == 0)
+ if (TEMP_FAILURE_RETRY(poll(&pfd, 1, uipc_main.ch[ch_id].read_poll_tmo_ms)) == 0)
{
BTIF_TRACE_EVENT("poll timeout (%d ms)", uipc_main.ch[ch_id].read_poll_tmo_ms);
break;
@@ -813,7 +813,7 @@
return 0;
}
- n = recv(fd, p_buf+n_read, len-n_read, 0);
+ n = TEMP_FAILURE_RETRY(recv(fd, p_buf+n_read, len-n_read, 0));
//BTIF_TRACE_EVENT("read %d bytes", n);
@@ -893,4 +893,3 @@
return FALSE;
}
-