diff
+ u8 temp_buf[sizeof(u32)];
+ if (optlen > sizeof(u32)) {
+     err = -EINVAL;
+     break;
+ }
- if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
+ if (copy_from_sockptr(temp_buf, optval, optlen)) {
     err = -EFAULT;
     break;
  }
+ memcpy(&opt, temp_buf, optlen);
