Hello, We found a data race on dev->mtu between function __dev_set_mtu() and rawv6_send_hdrinc(). It happens with the following interleaving.
writer: __dev_set_mtu() reader: rawv6_send_hdrinc() if (length > rt->dst.dev->mtu) { WRITE_ONCE(dev->mtu, new_mtu); ipv6_local_error(sk, EMSGSIZE, fl6, rt->dst.dev->mtu); If the writer happens to change dev->mtu to a value that is bigger than the variable ‘length’, then ipv6_local_error will read a value that doesn’t satisfy this conditional statement. While there is no need to use lock to protect the read, it is probably better to only read dev->mtu once in rawv6_send_hdrinc(). Thanks, Sishuai