nd6_dad_start() contains an (admittedly narrow) race:
- T1 calls nd6_dad_start() on an address and adds the corresponding dadq to the DAD list. dp now has a refcount of 1, and we haven't yet set up the callout.
- T2 removes the DAD list entry as part of address teardown. This causes the dadq to be removed from the list and its refcount decremented, so it is freed.
- T1 calls nd6_dad_starttimer() on a freed dadq.
This change fixes the race by holding the DAD write lock across both the
list insertion and the nd6_dad_starttimer() call.