There is already a memory_intersects() helper in sections.h, use memory_intersects() directly instead of private overlap().
Showing the changes to kernel (1 of 1 file). Show all
Unified · Split
| @@ -1064,20 +1064,10 @@ static void check_for_stack(struct device *dev, · 1063 unmodified lines | ||
| 1064 | 1064 | } |
| 1065 | 1065 | } |
| 1066 | 1066 | |
| 1067 | −static inline bool overlap(void *addr, unsigned long len, void *start, void *end) | |
| 1068 | −{ | |
| 1069 | − unsigned long a1 = (unsigned long)addr; | |
| 1070 | − unsigned long b1 = a1 + len; | |
| 1071 | − unsigned long a2 = (unsigned long)start; | |
| 1072 | − unsigned long b2 = (unsigned long)end; | |
| 1073 | − | |
| 1074 | − return !(b1 <= a2 || a1 >= b2); | |
| 1075 | −} | |
| 1076 | − | |
| 1077 | 1067 | static void check_for_illegal_area(struct device *dev, void *addr, unsigned long len) |
| 1078 | 1068 | { |
| 1079 | − if (overlap(addr, len, _stext, _etext) || | |
| 1080 | − overlap(addr, len, __start_rodata, __end_rodata)) | |
| 1069 | + if (memory_intersects(_stext, _etext, addr, len) || | |
| 1070 | + memory_intersects(__start_rodata, __end_rodata, addr, len)) | |
| 1081 | 1071 | err_printk(dev, NULL, "device driver maps memory from kernel text or rodata [addr=%p] [len=%lu]\n", addr, len); |
| 1082 | 1072 | } |
| 1083 | 1073 | |