]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
s390/qdio: sanitize put_indicator
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Thu, 26 Oct 2017 14:47:25 +0000 (16:47 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 3 Nov 2017 07:00:33 +0000 (08:00 +0100)
qdio maintains an array of struct indicator_t. put_indicator takes a pointer
to a member of a struct indicator_t within that array, calculates the index,
and uses the array and the index to get the struct indicator_t.

Simply use the pointer directly.

Although the pointer happens to point to the first member of that struct
use the container_of macro.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Acked-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/qdio_thinint.c

index 3e587bf426b0ef09b5f6d0804ae2b378e0a8ab09..f99d1c36168daa6bc6b62a516ba6eea9eed97004 100644 (file)
@@ -66,13 +66,11 @@ static u32 *get_indicator(void)
 
 static void put_indicator(u32 *addr)
 {
-       int i;
+       struct indicator_t *ind = container_of(addr, struct indicator_t, ind);
 
        if (!addr)
                return;
-       i = ((unsigned long)addr - (unsigned long)q_indicators) /
-               sizeof(struct indicator_t);
-       atomic_dec(&q_indicators[i].count);
+       atomic_dec(&ind->count);
 }
 
 void tiqdio_add_input_queues(struct qdio_irq *irq_ptr)