[PATCH v2] kexec: add resriction on the kexec_load
kbuild test robot
lkp at intel.com
Thu Jul 21 23:49:59 PDT 2016
Hi,
[auto build test ERROR on stable/master]
[also build test ERROR on v4.7-rc7]
[cannot apply to next-20160721]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/zhongjiang/kexec-add-resriction-on-the-kexec_load/20160722-143017
base: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git master
config: i386-defconfig (attached as .config)
compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All error/warnings (new ones prefixed by >>):
kernel/kexec_core.c: In function 'sanity_check_segment_list':
>> kernel/kexec_core.c:222:3: error: 'total' undeclared (first use in this function)
total += image->segment[i].memsz;
^~~~~
kernel/kexec_core.c:222:3: note: each undeclared identifier is reported only once for each function it appears in
>> kernel/kexec_core.c:151:16: warning: unused variable 'total_segments' [-Wunused-variable]
unsigned long total_segments = 0;
^~~~~~~~~~~~~~
vim +/total +222 kernel/kexec_core.c
145 gfp_t gfp_mask,
146 unsigned long dest);
147
148 int sanity_check_segment_list(struct kimage *image)
149 {
150 int result, i;
> 151 unsigned long total_segments = 0;
152 unsigned long nr_segments = image->nr_segments;
153
154 /*
155 * Verify we have good destination addresses. The caller is
156 * responsible for making certain we don't attempt to load
157 * the new image into invalid or reserved areas of RAM. This
158 * just verifies it is an address we can use.
159 *
160 * Since the kernel does everything in page size chunks ensure
161 * the destination addresses are page aligned. Too many
162 * special cases crop of when we don't do this. The most
163 * insidious is getting overlapping destination addresses
164 * simply because addresses are changed to page size
165 * granularity.
166 */
167 result = -EADDRNOTAVAIL;
168 for (i = 0; i < nr_segments; i++) {
169 unsigned long mstart, mend;
170
171 mstart = image->segment[i].mem;
172 mend = mstart + image->segment[i].memsz;
173 if ((mstart & ~PAGE_MASK) || (mend & ~PAGE_MASK))
174 return result;
175 if (mend >= KEXEC_DESTINATION_MEMORY_LIMIT)
176 return result;
177 }
178
179 /* Verify our destination addresses do not overlap.
180 * If we alloed overlapping destination addresses
181 * through very weird things can happen with no
182 * easy explanation as one segment stops on another.
183 */
184 result = -EINVAL;
185 for (i = 0; i < nr_segments; i++) {
186 unsigned long mstart, mend;
187 unsigned long j;
188
189 mstart = image->segment[i].mem;
190 mend = mstart + image->segment[i].memsz;
191 for (j = 0; j < i; j++) {
192 unsigned long pstart, pend;
193
194 pstart = image->segment[j].mem;
195 pend = pstart + image->segment[j].memsz;
196 /* Do the segments overlap ? */
197 if ((mend > pstart) && (mstart < pend))
198 return result;
199 }
200 }
201
202 /* Ensure our buffer sizes are strictly less than
203 * our memory sizes. This should always be the case,
204 * and it is easier to check up front than to be surprised
205 * later on.
206 */
207 result = -EINVAL;
208 for (i = 0; i < nr_segments; i++) {
209 if (image->segment[i].bufsz > image->segment[i].memsz)
210 return result;
211 }
212
213 /* Verity all segment size donnot exceed the specified size.
214 * if segment size from user space is too large, a large
215 * amount of time will be wasted when allocating page. so,
216 * softlockup may be come up.
217 */
218 for (i = 0; i < nr_segments; i++) {
219 if (image->segment[i].memsz > (totalram_pages / 2))
220 return result;
221
> 222 total += image->segment[i].memsz;
223 }
224
225 if (total > (totalram_pages / 2))
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/octet-stream
Size: 24863 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/kexec/attachments/20160722/3bfcc20b/attachment-0001.obj>
More information about the kexec
mailing list