.. | .. |
---|
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); |
---|