From 2e165bee41dbb9983d2c46677844e7adbd8c446f Mon Sep 17 00:00:00 2001 From: wanga Date: Wed, 8 Aug 2018 00:00:30 +0800 Subject: [PATCH] Protect against priority inversion for linux (#194) Set priority inheritance for mutex --- oshw/linux/nicdrv.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/oshw/linux/nicdrv.c b/oshw/linux/nicdrv.c index 8138485..c58a9a1 100644 --- a/oshw/linux/nicdrv.c +++ b/oshw/linux/nicdrv.c @@ -95,6 +95,7 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary) struct ifreq ifr; struct sockaddr_ll sll; int *psock; + pthread_mutexattr_t mutexattr; rval = 0; if (secondary) @@ -123,9 +124,11 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary) } else { - pthread_mutex_init(&(port->getindex_mutex), NULL); - pthread_mutex_init(&(port->tx_mutex) , NULL); - pthread_mutex_init(&(port->rx_mutex) , NULL); + pthread_mutexattr_init(&mutexattr); + pthread_mutexattr_setprotocol(&mutexattr , PTHREAD_PRIO_INHERIT); + pthread_mutex_init(&(port->getindex_mutex), &mutexattr); + pthread_mutex_init(&(port->tx_mutex) , &mutexattr); + pthread_mutex_init(&(port->rx_mutex) , &mutexattr); port->sockhandle = -1; port->lastidx = 0; port->redstate = ECT_RED_NONE;