pktgen: prevent pktgen from using bad tx queue
With the new multi-queue transmit code, it is possible to accidentally
make pktgen pick a non-existing tx queue simply by using a stale
script to drive pktgen. Access to this non-existing tx queue will
then trigger a bad memory access and kill the machine.
For example, setting "queue_map_max 2" will cause my machine to die
when accessing a garbage spinlock in the non-existing tx queue:
BUG: spinlock bad magic on CPU#0, kpktgend_0/564
lock:
ffff88001ddf6718, .magic:
ffffffff, .owner: /-1, .owner_cpu: 0
Pid: 564, comm: kpktgend_0 Not tainted 2.6.27-rc3 #35
Call Trace:
[<
ffffffff803a1228>] spin_bug+0xa4/0xac
[<
ffffffff803a1253>] _raw_spin_lock+0x23/0x123
[<
ffffffff8055b06f>] _spin_lock_bh+0x17/0x1b
[<
ffffffff804cb57d>] pktgen_thread_worker+0xa97/0x1002
[<
ffffffff8022874d>] ? finish_task_switch+0x38/0x97
[<
ffffffff80242077>] ? autoremove_wake_function+0x0/0x36
[<
ffffffff80242077>] ? autoremove_wake_function+0x0/0x36
[<
ffffffff804caae6>] ? pktgen_thread_worker+0x0/0x1002
[<
ffffffff80241a40>] kthread+0x44/0x6d
[<
ffffffff8020c399>] child_rip+0xa/0x11
[<
ffffffff802419fc>] ? kthread+0x0/0x6d
[<
ffffffff8020c38f>] ? child_rip+0x0/0x11
The attached patch adds some sanity checking to prevent
these sorts of configuration errors.
Signed-off-by: Andrew Gallatin <gallatin@myri.com>
Signed-off-by: David S. Miller <davem@davemloft.net>