|
@@ -2616,6 +2616,13 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
|
|
|
|
|
|
|
|
mutex_lock(&po->pg_vec_lock);
|
|
mutex_lock(&po->pg_vec_lock);
|
|
|
|
|
|
|
|
|
|
+ /* packet_sendmsg() check on tx_ring.pg_vec was lockless,
|
|
|
|
|
+ * we need to confirm it under protection of pg_vec_lock.
|
|
|
|
|
+ */
|
|
|
|
|
+ if (unlikely(!po->tx_ring.pg_vec)) {
|
|
|
|
|
+ err = -EBUSY;
|
|
|
|
|
+ goto out;
|
|
|
|
|
+ }
|
|
|
if (likely(saddr == NULL)) {
|
|
if (likely(saddr == NULL)) {
|
|
|
dev = packet_cached_dev_get(po);
|
|
dev = packet_cached_dev_get(po);
|
|
|
proto = po->num;
|
|
proto = po->num;
|