mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 00:00:00 -04:00
net: qrtr: Change port allocation to use cyclic idr
There is a race for clients that open sockets before the control port is bound. If a client gets an idr that was allocated before the control port is bound, there is a chance the previous address owner sent lookup packets to the control port. The new address owner will get residual responses to this the lookup packets. Change the idr_alloc to idr_alloc_cyclic so new idr's are allocated instead of trying to reuse the freed idrs. Change-Id: Ie1bda7a818309503f80542e739bac646327296f7 Signed-off-by: Chris Lew <clew@codeaurora.org>
This commit is contained in:
parent
5e6fd7cda2
commit
06809f9816
1 changed files with 4 additions and 4 deletions
|
|
@ -759,9 +759,8 @@ static int qrtr_port_assign(struct qrtr_sock *ipc, int *port)
|
|||
|
||||
mutex_lock(&qrtr_port_lock);
|
||||
if (!*port) {
|
||||
rc = idr_alloc(&qrtr_ports, ipc,
|
||||
QRTR_MIN_EPH_SOCKET, QRTR_MAX_EPH_SOCKET + 1,
|
||||
GFP_ATOMIC);
|
||||
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)) {
|
||||
|
|
@ -769,7 +768,8 @@ static int qrtr_port_assign(struct qrtr_sock *ipc, int *port)
|
|||
} else if (*port == QRTR_PORT_CTRL) {
|
||||
rc = idr_alloc(&qrtr_ports, ipc, 0, 1, GFP_ATOMIC);
|
||||
} else {
|
||||
rc = idr_alloc(&qrtr_ports, ipc, *port, *port + 1, GFP_ATOMIC);
|
||||
rc = idr_alloc_cyclic(&qrtr_ports, ipc, *port, *port + 1,
|
||||
GFP_ATOMIC);
|
||||
if (rc >= 0)
|
||||
*port = rc;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue