| .. | .. |
|---|
| 1029 | 1029 | if (err) |
|---|
| 1030 | 1030 | return err; |
|---|
| 1031 | 1031 | |
|---|
| 1032 | + /* Avoid assigning overflow values */ |
|---|
| 1033 | + if (info->lo_offset > LLONG_MAX || info->lo_sizelimit > LLONG_MAX) |
|---|
| 1034 | + return -EOVERFLOW; |
|---|
| 1035 | + |
|---|
| 1032 | 1036 | lo->lo_offset = info->lo_offset; |
|---|
| 1033 | 1037 | lo->lo_sizelimit = info->lo_sizelimit; |
|---|
| 1034 | | - |
|---|
| 1035 | | - /* loff_t vars have been assigned __u64 */ |
|---|
| 1036 | | - if (lo->lo_offset < 0 || lo->lo_sizelimit < 0) |
|---|
| 1037 | | - return -EOVERFLOW; |
|---|
| 1038 | 1038 | |
|---|
| 1039 | 1039 | memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE); |
|---|
| 1040 | 1040 | memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE); |
|---|