mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 08:36:12 -04:00
Merge "net: qrtr: Use cyclic idr allocator for port assignment"
This commit is contained in:
commit
5743323a4d
1 changed files with 12 additions and 14 deletions
|
|
@ -1381,27 +1381,25 @@ static void qrtr_port_remove(struct qrtr_sock *ipc)
|
|||
*/
|
||||
static int qrtr_port_assign(struct qrtr_sock *ipc, int *port)
|
||||
{
|
||||
u32 min_port;
|
||||
int rc;
|
||||
|
||||
if (!*port) {
|
||||
min_port = QRTR_MIN_EPH_SOCKET;
|
||||
rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, QRTR_MAX_EPH_SOCKET, GFP_ATOMIC);
|
||||
if (!rc)
|
||||
*port = min_port;
|
||||
rc = idr_alloc_cyclic(&qrtr_ports, ipc, QRTR_MIN_EPH_SOCKET,
|
||||
QRTR_MAX_EPH_SOCKET + 1, GFP_ATOMIC);
|
||||
if (rc >= 0)
|
||||
*port = rc;
|
||||
} else if (*port < QRTR_MIN_EPH_SOCKET &&
|
||||
!(capable(CAP_NET_ADMIN) ||
|
||||
in_egroup_p(AID_VENDOR_QRTR) ||
|
||||
in_egroup_p(GLOBAL_ROOT_GID))) {
|
||||
!(capable(CAP_NET_ADMIN) ||
|
||||
in_egroup_p(AID_VENDOR_QRTR) ||
|
||||
in_egroup_p(GLOBAL_ROOT_GID))) {
|
||||
rc = -EACCES;
|
||||
} else if (*port == QRTR_PORT_CTRL) {
|
||||
min_port = 0;
|
||||
rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, 0, GFP_ATOMIC);
|
||||
rc = idr_alloc(&qrtr_ports, ipc, 0, 1, GFP_ATOMIC);
|
||||
} else {
|
||||
min_port = *port;
|
||||
rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, *port, GFP_ATOMIC);
|
||||
if (!rc)
|
||||
*port = min_port;
|
||||
rc = idr_alloc_cyclic(&qrtr_ports, ipc, *port, *port + 1,
|
||||
GFP_ATOMIC);
|
||||
if (rc >= 0)
|
||||
*port = rc;
|
||||
}
|
||||
|
||||
if (rc == -ENOSPC)
|
||||
|
|
|
|||
Loading…
Reference in a new issue