* [vfs:work.elf-compat 11/13] fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
@ 2021-01-04 10:13 ` kernel test robot
0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-01-04 10:13 UTC (permalink / raw)
To: Al Viro; +Cc: kbuild-all, linux-fsdevel
[-- Attachment #1: Type: text/plain, Size: 16718 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.elf-compat
head: b9613abdecd9d2dae95f4712985280c80ce8e646
commit: 5df3c15125233fbc59fd003249c381c7edd985cc [11/13] Kconfig: regularize selection of CONFIG_BINFMT_ELF
config: x86_64-randconfig-a005-20210104 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git/commit/?id=5df3c15125233fbc59fd003249c381c7edd985cc
git remote add vfs https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git
git fetch --no-tags vfs work.elf-compat
git checkout 5df3c15125233fbc59fd003249c381c7edd985cc
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
ld: fs/compat_binfmt_elf.o: in function `create_elf_tables':
>> fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
>> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
>> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
vim +254 fs/binfmt_elf.c
483fad1c3fa1060 Nathan Lynch 2008-07-22 170
^1da177e4c3f415 Linus Torvalds 2005-04-16 171 static int
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 172 create_elf_tables(struct linux_binprm *bprm, const struct elfhdr *exec,
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 173 unsigned long load_addr, unsigned long interp_load_addr,
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 174 unsigned long e_entry)
^1da177e4c3f415 Linus Torvalds 2005-04-16 175 {
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 176 struct mm_struct *mm = current->mm;
^1da177e4c3f415 Linus Torvalds 2005-04-16 177 unsigned long p = bprm->p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 178 int argc = bprm->argc;
^1da177e4c3f415 Linus Torvalds 2005-04-16 179 int envc = bprm->envc;
^1da177e4c3f415 Linus Torvalds 2005-04-16 180 elf_addr_t __user *sp;
^1da177e4c3f415 Linus Torvalds 2005-04-16 181 elf_addr_t __user *u_platform;
483fad1c3fa1060 Nathan Lynch 2008-07-22 182 elf_addr_t __user *u_base_platform;
f06295b44c296c8 Kees Cook 2009-01-07 183 elf_addr_t __user *u_rand_bytes;
^1da177e4c3f415 Linus Torvalds 2005-04-16 184 const char *k_platform = ELF_PLATFORM;
483fad1c3fa1060 Nathan Lynch 2008-07-22 185 const char *k_base_platform = ELF_BASE_PLATFORM;
f06295b44c296c8 Kees Cook 2009-01-07 186 unsigned char k_rand_bytes[16];
^1da177e4c3f415 Linus Torvalds 2005-04-16 187 int items;
^1da177e4c3f415 Linus Torvalds 2005-04-16 188 elf_addr_t *elf_info;
1f83d80677a24ae Alexey Dobriyan 2020-01-30 189 int ei_index;
86a264abe542cfe David Howells 2008-11-14 190 const struct cred *cred = current_cred();
b6a2fea39318e43 Ollie Wild 2007-07-19 191 struct vm_area_struct *vma;
^1da177e4c3f415 Linus Torvalds 2005-04-16 192
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 193 /*
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 194 * In some cases (e.g. Hyper-Threading), we want to avoid L1
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 195 * evictions by the processes running on the same package. One
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 196 * thing we can do is to shuffle the initial stack for them.
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 197 */
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 198
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 199 p = arch_align_stack(p);
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 200
^1da177e4c3f415 Linus Torvalds 2005-04-16 201 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 202 * If this architecture has a platform capability string, copy it
^1da177e4c3f415 Linus Torvalds 2005-04-16 203 * to userspace. In some cases (Sparc), this info is impossible
^1da177e4c3f415 Linus Torvalds 2005-04-16 204 * for userspace to get any other way, in others (i386) it is
^1da177e4c3f415 Linus Torvalds 2005-04-16 205 * merely difficult.
^1da177e4c3f415 Linus Torvalds 2005-04-16 206 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 207 u_platform = NULL;
^1da177e4c3f415 Linus Torvalds 2005-04-16 208 if (k_platform) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 209 size_t len = strlen(k_platform) + 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 210
^1da177e4c3f415 Linus Torvalds 2005-04-16 211 u_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
646e84deb4496e2 Al Viro 2020-02-19 212 if (copy_to_user(u_platform, k_platform, len))
^1da177e4c3f415 Linus Torvalds 2005-04-16 213 return -EFAULT;
^1da177e4c3f415 Linus Torvalds 2005-04-16 214 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 215
483fad1c3fa1060 Nathan Lynch 2008-07-22 216 /*
483fad1c3fa1060 Nathan Lynch 2008-07-22 217 * If this architecture has a "base" platform capability
483fad1c3fa1060 Nathan Lynch 2008-07-22 218 * string, copy it to userspace.
483fad1c3fa1060 Nathan Lynch 2008-07-22 219 */
483fad1c3fa1060 Nathan Lynch 2008-07-22 220 u_base_platform = NULL;
483fad1c3fa1060 Nathan Lynch 2008-07-22 221 if (k_base_platform) {
483fad1c3fa1060 Nathan Lynch 2008-07-22 222 size_t len = strlen(k_base_platform) + 1;
483fad1c3fa1060 Nathan Lynch 2008-07-22 223
483fad1c3fa1060 Nathan Lynch 2008-07-22 224 u_base_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
646e84deb4496e2 Al Viro 2020-02-19 225 if (copy_to_user(u_base_platform, k_base_platform, len))
483fad1c3fa1060 Nathan Lynch 2008-07-22 226 return -EFAULT;
483fad1c3fa1060 Nathan Lynch 2008-07-22 227 }
483fad1c3fa1060 Nathan Lynch 2008-07-22 228
f06295b44c296c8 Kees Cook 2009-01-07 229 /*
f06295b44c296c8 Kees Cook 2009-01-07 230 * Generate 16 random bytes for userspace PRNG seeding.
f06295b44c296c8 Kees Cook 2009-01-07 231 */
f06295b44c296c8 Kees Cook 2009-01-07 232 get_random_bytes(k_rand_bytes, sizeof(k_rand_bytes));
f06295b44c296c8 Kees Cook 2009-01-07 233 u_rand_bytes = (elf_addr_t __user *)
f06295b44c296c8 Kees Cook 2009-01-07 234 STACK_ALLOC(p, sizeof(k_rand_bytes));
646e84deb4496e2 Al Viro 2020-02-19 235 if (copy_to_user(u_rand_bytes, k_rand_bytes, sizeof(k_rand_bytes)))
f06295b44c296c8 Kees Cook 2009-01-07 236 return -EFAULT;
f06295b44c296c8 Kees Cook 2009-01-07 237
^1da177e4c3f415 Linus Torvalds 2005-04-16 238 /* Create the ELF interpreter info */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 239 elf_info = (elf_addr_t *)mm->saved_auxv;
4f9a58d75bfe82a Olaf Hering 2007-10-16 240 /* update AT_VECTOR_SIZE_BASE if the number of NEW_AUX_ENT() changes */
^1da177e4c3f415 Linus Torvalds 2005-04-16 241 #define NEW_AUX_ENT(id, val) \
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 242 do { \
1f83d80677a24ae Alexey Dobriyan 2020-01-30 243 *elf_info++ = id; \
1f83d80677a24ae Alexey Dobriyan 2020-01-30 244 *elf_info++ = val; \
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 245 } while (0)
^1da177e4c3f415 Linus Torvalds 2005-04-16 246
^1da177e4c3f415 Linus Torvalds 2005-04-16 247 #ifdef ARCH_DLINFO
^1da177e4c3f415 Linus Torvalds 2005-04-16 248 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 249 * ARCH_DLINFO must come first so PPC can do its special alignment of
^1da177e4c3f415 Linus Torvalds 2005-04-16 250 * AUXV.
4f9a58d75bfe82a Olaf Hering 2007-10-16 251 * update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT() in
4f9a58d75bfe82a Olaf Hering 2007-10-16 252 * ARCH_DLINFO changes
^1da177e4c3f415 Linus Torvalds 2005-04-16 253 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 @254 ARCH_DLINFO;
^1da177e4c3f415 Linus Torvalds 2005-04-16 255 #endif
^1da177e4c3f415 Linus Torvalds 2005-04-16 256 NEW_AUX_ENT(AT_HWCAP, ELF_HWCAP);
^1da177e4c3f415 Linus Torvalds 2005-04-16 257 NEW_AUX_ENT(AT_PAGESZ, ELF_EXEC_PAGESIZE);
^1da177e4c3f415 Linus Torvalds 2005-04-16 258 NEW_AUX_ENT(AT_CLKTCK, CLOCKS_PER_SEC);
^1da177e4c3f415 Linus Torvalds 2005-04-16 259 NEW_AUX_ENT(AT_PHDR, load_addr + exec->e_phoff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 260 NEW_AUX_ENT(AT_PHENT, sizeof(struct elf_phdr));
^1da177e4c3f415 Linus Torvalds 2005-04-16 261 NEW_AUX_ENT(AT_PHNUM, exec->e_phnum);
^1da177e4c3f415 Linus Torvalds 2005-04-16 262 NEW_AUX_ENT(AT_BASE, interp_load_addr);
^1da177e4c3f415 Linus Torvalds 2005-04-16 263 NEW_AUX_ENT(AT_FLAGS, 0);
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 264 NEW_AUX_ENT(AT_ENTRY, e_entry);
ebc887b278944fc Eric W. Biederman 2012-02-07 265 NEW_AUX_ENT(AT_UID, from_kuid_munged(cred->user_ns, cred->uid));
ebc887b278944fc Eric W. Biederman 2012-02-07 266 NEW_AUX_ENT(AT_EUID, from_kuid_munged(cred->user_ns, cred->euid));
ebc887b278944fc Eric W. Biederman 2012-02-07 267 NEW_AUX_ENT(AT_GID, from_kgid_munged(cred->user_ns, cred->gid));
ebc887b278944fc Eric W. Biederman 2012-02-07 268 NEW_AUX_ENT(AT_EGID, from_kgid_munged(cred->user_ns, cred->egid));
c425e189ffd7720 Kees Cook 2017-07-18 269 NEW_AUX_ENT(AT_SECURE, bprm->secureexec);
f06295b44c296c8 Kees Cook 2009-01-07 270 NEW_AUX_ENT(AT_RANDOM, (elf_addr_t)(unsigned long)u_rand_bytes);
2171364d1a92d0a Michael Neuling 2013-04-17 271 #ifdef ELF_HWCAP2
2171364d1a92d0a Michael Neuling 2013-04-17 272 NEW_AUX_ENT(AT_HWCAP2, ELF_HWCAP2);
2171364d1a92d0a Michael Neuling 2013-04-17 273 #endif
651910874633a75 John Reiser 2008-07-21 274 NEW_AUX_ENT(AT_EXECFN, bprm->exec);
^1da177e4c3f415 Linus Torvalds 2005-04-16 275 if (k_platform) {
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 276 NEW_AUX_ENT(AT_PLATFORM,
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 277 (elf_addr_t)(unsigned long)u_platform);
^1da177e4c3f415 Linus Torvalds 2005-04-16 278 }
483fad1c3fa1060 Nathan Lynch 2008-07-22 279 if (k_base_platform) {
483fad1c3fa1060 Nathan Lynch 2008-07-22 280 NEW_AUX_ENT(AT_BASE_PLATFORM,
483fad1c3fa1060 Nathan Lynch 2008-07-22 281 (elf_addr_t)(unsigned long)u_base_platform);
483fad1c3fa1060 Nathan Lynch 2008-07-22 282 }
b8a61c9e7b4a0fe Eric W. Biederman 2020-05-14 283 if (bprm->have_execfd) {
b8a61c9e7b4a0fe Eric W. Biederman 2020-05-14 284 NEW_AUX_ENT(AT_EXECFD, bprm->execfd);
^1da177e4c3f415 Linus Torvalds 2005-04-16 285 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 286 #undef NEW_AUX_ENT
^1da177e4c3f415 Linus Torvalds 2005-04-16 287 /* AT_NULL is zero; clear the rest too */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 288 memset(elf_info, 0, (char *)mm->saved_auxv +
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 289 sizeof(mm->saved_auxv) - (char *)elf_info);
^1da177e4c3f415 Linus Torvalds 2005-04-16 290
^1da177e4c3f415 Linus Torvalds 2005-04-16 291 /* And advance past the AT_NULL entry. */
1f83d80677a24ae Alexey Dobriyan 2020-01-30 292 elf_info += 2;
^1da177e4c3f415 Linus Torvalds 2005-04-16 293
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 294 ei_index = elf_info - (elf_addr_t *)mm->saved_auxv;
^1da177e4c3f415 Linus Torvalds 2005-04-16 295 sp = STACK_ADD(p, ei_index);
^1da177e4c3f415 Linus Torvalds 2005-04-16 296
d20894a23708c2a Andi Kleen 2008-02-08 297 items = (argc + 1) + (envc + 1) + 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 298 bprm->p = STACK_ROUND(sp, items);
^1da177e4c3f415 Linus Torvalds 2005-04-16 299
^1da177e4c3f415 Linus Torvalds 2005-04-16 300 /* Point sp at the lowest address on the stack */
^1da177e4c3f415 Linus Torvalds 2005-04-16 301 #ifdef CONFIG_STACK_GROWSUP
^1da177e4c3f415 Linus Torvalds 2005-04-16 302 sp = (elf_addr_t __user *)bprm->p - items - ei_index;
^1da177e4c3f415 Linus Torvalds 2005-04-16 303 bprm->exec = (unsigned long)sp; /* XXX: PARISC HACK */
^1da177e4c3f415 Linus Torvalds 2005-04-16 304 #else
^1da177e4c3f415 Linus Torvalds 2005-04-16 305 sp = (elf_addr_t __user *)bprm->p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 306 #endif
^1da177e4c3f415 Linus Torvalds 2005-04-16 307
b6a2fea39318e43 Ollie Wild 2007-07-19 308
b6a2fea39318e43 Ollie Wild 2007-07-19 309 /*
b6a2fea39318e43 Ollie Wild 2007-07-19 310 * Grow the stack manually; some architectures have a limit on how
b6a2fea39318e43 Ollie Wild 2007-07-19 311 * far ahead a user-space access may be in order to grow the stack.
b6a2fea39318e43 Ollie Wild 2007-07-19 312 */
b2767d97f5ff758 Jann Horn 2020-10-17 313 if (mmap_read_lock_killable(mm))
b2767d97f5ff758 Jann Horn 2020-10-17 314 return -EINTR;
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 315 vma = find_extend_vma(mm, bprm->p);
b2767d97f5ff758 Jann Horn 2020-10-17 316 mmap_read_unlock(mm);
b6a2fea39318e43 Ollie Wild 2007-07-19 317 if (!vma)
b6a2fea39318e43 Ollie Wild 2007-07-19 318 return -EFAULT;
b6a2fea39318e43 Ollie Wild 2007-07-19 319
^1da177e4c3f415 Linus Torvalds 2005-04-16 320 /* Now, let's put argc (and argv, envp if appropriate) on the stack */
646e84deb4496e2 Al Viro 2020-02-19 321 if (put_user(argc, sp++))
^1da177e4c3f415 Linus Torvalds 2005-04-16 322 return -EFAULT;
^1da177e4c3f415 Linus Torvalds 2005-04-16 323
67c6777a5d331dd Kees Cook 2017-07-10 324 /* Populate list of argv pointers back to argv strings. */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 325 p = mm->arg_end = mm->arg_start;
^1da177e4c3f415 Linus Torvalds 2005-04-16 326 while (argc-- > 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 327 size_t len;
646e84deb4496e2 Al Viro 2020-02-19 328 if (put_user((elf_addr_t)p, sp++))
841d5fb7c75260f Heiko Carstens 2006-12-06 329 return -EFAULT;
b6a2fea39318e43 Ollie Wild 2007-07-19 330 len = strnlen_user((void __user *)p, MAX_ARG_STRLEN);
b6a2fea39318e43 Ollie Wild 2007-07-19 331 if (!len || len > MAX_ARG_STRLEN)
23c4971e3d97de4 WANG Cong 2008-05-08 332 return -EINVAL;
^1da177e4c3f415 Linus Torvalds 2005-04-16 333 p += len;
^1da177e4c3f415 Linus Torvalds 2005-04-16 334 }
646e84deb4496e2 Al Viro 2020-02-19 335 if (put_user(0, sp++))
^1da177e4c3f415 Linus Torvalds 2005-04-16 336 return -EFAULT;
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 337 mm->arg_end = p;
67c6777a5d331dd Kees Cook 2017-07-10 338
67c6777a5d331dd Kees Cook 2017-07-10 339 /* Populate list of envp pointers back to envp strings. */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 340 mm->env_end = mm->env_start = p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 341 while (envc-- > 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 342 size_t len;
646e84deb4496e2 Al Viro 2020-02-19 343 if (put_user((elf_addr_t)p, sp++))
841d5fb7c75260f Heiko Carstens 2006-12-06 344 return -EFAULT;
b6a2fea39318e43 Ollie Wild 2007-07-19 345 len = strnlen_user((void __user *)p, MAX_ARG_STRLEN);
b6a2fea39318e43 Ollie Wild 2007-07-19 346 if (!len || len > MAX_ARG_STRLEN)
23c4971e3d97de4 WANG Cong 2008-05-08 347 return -EINVAL;
^1da177e4c3f415 Linus Torvalds 2005-04-16 348 p += len;
^1da177e4c3f415 Linus Torvalds 2005-04-16 349 }
646e84deb4496e2 Al Viro 2020-02-19 350 if (put_user(0, sp++))
^1da177e4c3f415 Linus Torvalds 2005-04-16 351 return -EFAULT;
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 352 mm->env_end = p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 353
^1da177e4c3f415 Linus Torvalds 2005-04-16 354 /* Put the elf_info on the stack in the right place. */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 355 if (copy_to_user(sp, mm->saved_auxv, ei_index * sizeof(elf_addr_t)))
^1da177e4c3f415 Linus Torvalds 2005-04-16 356 return -EFAULT;
^1da177e4c3f415 Linus Torvalds 2005-04-16 357 return 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 358 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 359
:::::: The code at line 254 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 29408 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* [vfs:work.elf-compat 11/13] fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
@ 2021-01-04 10:13 ` kernel test robot
0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-01-04 10:13 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 16946 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.elf-compat
head: b9613abdecd9d2dae95f4712985280c80ce8e646
commit: 5df3c15125233fbc59fd003249c381c7edd985cc [11/13] Kconfig: regularize selection of CONFIG_BINFMT_ELF
config: x86_64-randconfig-a005-20210104 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git/commit/?id=5df3c15125233fbc59fd003249c381c7edd985cc
git remote add vfs https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git
git fetch --no-tags vfs work.elf-compat
git checkout 5df3c15125233fbc59fd003249c381c7edd985cc
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
ld: fs/compat_binfmt_elf.o: in function `create_elf_tables':
>> fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
>> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
>> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
vim +254 fs/binfmt_elf.c
483fad1c3fa1060 Nathan Lynch 2008-07-22 170
^1da177e4c3f415 Linus Torvalds 2005-04-16 171 static int
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 172 create_elf_tables(struct linux_binprm *bprm, const struct elfhdr *exec,
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 173 unsigned long load_addr, unsigned long interp_load_addr,
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 174 unsigned long e_entry)
^1da177e4c3f415 Linus Torvalds 2005-04-16 175 {
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 176 struct mm_struct *mm = current->mm;
^1da177e4c3f415 Linus Torvalds 2005-04-16 177 unsigned long p = bprm->p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 178 int argc = bprm->argc;
^1da177e4c3f415 Linus Torvalds 2005-04-16 179 int envc = bprm->envc;
^1da177e4c3f415 Linus Torvalds 2005-04-16 180 elf_addr_t __user *sp;
^1da177e4c3f415 Linus Torvalds 2005-04-16 181 elf_addr_t __user *u_platform;
483fad1c3fa1060 Nathan Lynch 2008-07-22 182 elf_addr_t __user *u_base_platform;
f06295b44c296c8 Kees Cook 2009-01-07 183 elf_addr_t __user *u_rand_bytes;
^1da177e4c3f415 Linus Torvalds 2005-04-16 184 const char *k_platform = ELF_PLATFORM;
483fad1c3fa1060 Nathan Lynch 2008-07-22 185 const char *k_base_platform = ELF_BASE_PLATFORM;
f06295b44c296c8 Kees Cook 2009-01-07 186 unsigned char k_rand_bytes[16];
^1da177e4c3f415 Linus Torvalds 2005-04-16 187 int items;
^1da177e4c3f415 Linus Torvalds 2005-04-16 188 elf_addr_t *elf_info;
1f83d80677a24ae Alexey Dobriyan 2020-01-30 189 int ei_index;
86a264abe542cfe David Howells 2008-11-14 190 const struct cred *cred = current_cred();
b6a2fea39318e43 Ollie Wild 2007-07-19 191 struct vm_area_struct *vma;
^1da177e4c3f415 Linus Torvalds 2005-04-16 192
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 193 /*
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 194 * In some cases (e.g. Hyper-Threading), we want to avoid L1
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 195 * evictions by the processes running on the same package. One
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 196 * thing we can do is to shuffle the initial stack for them.
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 197 */
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 198
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 199 p = arch_align_stack(p);
d68c9d6ae8f1fda Franck Bui-Huu 2007-10-16 200
^1da177e4c3f415 Linus Torvalds 2005-04-16 201 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 202 * If this architecture has a platform capability string, copy it
^1da177e4c3f415 Linus Torvalds 2005-04-16 203 * to userspace. In some cases (Sparc), this info is impossible
^1da177e4c3f415 Linus Torvalds 2005-04-16 204 * for userspace to get any other way, in others (i386) it is
^1da177e4c3f415 Linus Torvalds 2005-04-16 205 * merely difficult.
^1da177e4c3f415 Linus Torvalds 2005-04-16 206 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 207 u_platform = NULL;
^1da177e4c3f415 Linus Torvalds 2005-04-16 208 if (k_platform) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 209 size_t len = strlen(k_platform) + 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 210
^1da177e4c3f415 Linus Torvalds 2005-04-16 211 u_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
646e84deb4496e2 Al Viro 2020-02-19 212 if (copy_to_user(u_platform, k_platform, len))
^1da177e4c3f415 Linus Torvalds 2005-04-16 213 return -EFAULT;
^1da177e4c3f415 Linus Torvalds 2005-04-16 214 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 215
483fad1c3fa1060 Nathan Lynch 2008-07-22 216 /*
483fad1c3fa1060 Nathan Lynch 2008-07-22 217 * If this architecture has a "base" platform capability
483fad1c3fa1060 Nathan Lynch 2008-07-22 218 * string, copy it to userspace.
483fad1c3fa1060 Nathan Lynch 2008-07-22 219 */
483fad1c3fa1060 Nathan Lynch 2008-07-22 220 u_base_platform = NULL;
483fad1c3fa1060 Nathan Lynch 2008-07-22 221 if (k_base_platform) {
483fad1c3fa1060 Nathan Lynch 2008-07-22 222 size_t len = strlen(k_base_platform) + 1;
483fad1c3fa1060 Nathan Lynch 2008-07-22 223
483fad1c3fa1060 Nathan Lynch 2008-07-22 224 u_base_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
646e84deb4496e2 Al Viro 2020-02-19 225 if (copy_to_user(u_base_platform, k_base_platform, len))
483fad1c3fa1060 Nathan Lynch 2008-07-22 226 return -EFAULT;
483fad1c3fa1060 Nathan Lynch 2008-07-22 227 }
483fad1c3fa1060 Nathan Lynch 2008-07-22 228
f06295b44c296c8 Kees Cook 2009-01-07 229 /*
f06295b44c296c8 Kees Cook 2009-01-07 230 * Generate 16 random bytes for userspace PRNG seeding.
f06295b44c296c8 Kees Cook 2009-01-07 231 */
f06295b44c296c8 Kees Cook 2009-01-07 232 get_random_bytes(k_rand_bytes, sizeof(k_rand_bytes));
f06295b44c296c8 Kees Cook 2009-01-07 233 u_rand_bytes = (elf_addr_t __user *)
f06295b44c296c8 Kees Cook 2009-01-07 234 STACK_ALLOC(p, sizeof(k_rand_bytes));
646e84deb4496e2 Al Viro 2020-02-19 235 if (copy_to_user(u_rand_bytes, k_rand_bytes, sizeof(k_rand_bytes)))
f06295b44c296c8 Kees Cook 2009-01-07 236 return -EFAULT;
f06295b44c296c8 Kees Cook 2009-01-07 237
^1da177e4c3f415 Linus Torvalds 2005-04-16 238 /* Create the ELF interpreter info */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 239 elf_info = (elf_addr_t *)mm->saved_auxv;
4f9a58d75bfe82a Olaf Hering 2007-10-16 240 /* update AT_VECTOR_SIZE_BASE if the number of NEW_AUX_ENT() changes */
^1da177e4c3f415 Linus Torvalds 2005-04-16 241 #define NEW_AUX_ENT(id, val) \
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 242 do { \
1f83d80677a24ae Alexey Dobriyan 2020-01-30 243 *elf_info++ = id; \
1f83d80677a24ae Alexey Dobriyan 2020-01-30 244 *elf_info++ = val; \
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 245 } while (0)
^1da177e4c3f415 Linus Torvalds 2005-04-16 246
^1da177e4c3f415 Linus Torvalds 2005-04-16 247 #ifdef ARCH_DLINFO
^1da177e4c3f415 Linus Torvalds 2005-04-16 248 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 249 * ARCH_DLINFO must come first so PPC can do its special alignment of
^1da177e4c3f415 Linus Torvalds 2005-04-16 250 * AUXV.
4f9a58d75bfe82a Olaf Hering 2007-10-16 251 * update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT() in
4f9a58d75bfe82a Olaf Hering 2007-10-16 252 * ARCH_DLINFO changes
^1da177e4c3f415 Linus Torvalds 2005-04-16 253 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 @254 ARCH_DLINFO;
^1da177e4c3f415 Linus Torvalds 2005-04-16 255 #endif
^1da177e4c3f415 Linus Torvalds 2005-04-16 256 NEW_AUX_ENT(AT_HWCAP, ELF_HWCAP);
^1da177e4c3f415 Linus Torvalds 2005-04-16 257 NEW_AUX_ENT(AT_PAGESZ, ELF_EXEC_PAGESIZE);
^1da177e4c3f415 Linus Torvalds 2005-04-16 258 NEW_AUX_ENT(AT_CLKTCK, CLOCKS_PER_SEC);
^1da177e4c3f415 Linus Torvalds 2005-04-16 259 NEW_AUX_ENT(AT_PHDR, load_addr + exec->e_phoff);
^1da177e4c3f415 Linus Torvalds 2005-04-16 260 NEW_AUX_ENT(AT_PHENT, sizeof(struct elf_phdr));
^1da177e4c3f415 Linus Torvalds 2005-04-16 261 NEW_AUX_ENT(AT_PHNUM, exec->e_phnum);
^1da177e4c3f415 Linus Torvalds 2005-04-16 262 NEW_AUX_ENT(AT_BASE, interp_load_addr);
^1da177e4c3f415 Linus Torvalds 2005-04-16 263 NEW_AUX_ENT(AT_FLAGS, 0);
a62c5b1b6647ea0 Alexey Dobriyan 2020-01-30 264 NEW_AUX_ENT(AT_ENTRY, e_entry);
ebc887b278944fc Eric W. Biederman 2012-02-07 265 NEW_AUX_ENT(AT_UID, from_kuid_munged(cred->user_ns, cred->uid));
ebc887b278944fc Eric W. Biederman 2012-02-07 266 NEW_AUX_ENT(AT_EUID, from_kuid_munged(cred->user_ns, cred->euid));
ebc887b278944fc Eric W. Biederman 2012-02-07 267 NEW_AUX_ENT(AT_GID, from_kgid_munged(cred->user_ns, cred->gid));
ebc887b278944fc Eric W. Biederman 2012-02-07 268 NEW_AUX_ENT(AT_EGID, from_kgid_munged(cred->user_ns, cred->egid));
c425e189ffd7720 Kees Cook 2017-07-18 269 NEW_AUX_ENT(AT_SECURE, bprm->secureexec);
f06295b44c296c8 Kees Cook 2009-01-07 270 NEW_AUX_ENT(AT_RANDOM, (elf_addr_t)(unsigned long)u_rand_bytes);
2171364d1a92d0a Michael Neuling 2013-04-17 271 #ifdef ELF_HWCAP2
2171364d1a92d0a Michael Neuling 2013-04-17 272 NEW_AUX_ENT(AT_HWCAP2, ELF_HWCAP2);
2171364d1a92d0a Michael Neuling 2013-04-17 273 #endif
651910874633a75 John Reiser 2008-07-21 274 NEW_AUX_ENT(AT_EXECFN, bprm->exec);
^1da177e4c3f415 Linus Torvalds 2005-04-16 275 if (k_platform) {
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 276 NEW_AUX_ENT(AT_PLATFORM,
f4e5cc2c44bf760 Jesper Juhl 2006-06-23 277 (elf_addr_t)(unsigned long)u_platform);
^1da177e4c3f415 Linus Torvalds 2005-04-16 278 }
483fad1c3fa1060 Nathan Lynch 2008-07-22 279 if (k_base_platform) {
483fad1c3fa1060 Nathan Lynch 2008-07-22 280 NEW_AUX_ENT(AT_BASE_PLATFORM,
483fad1c3fa1060 Nathan Lynch 2008-07-22 281 (elf_addr_t)(unsigned long)u_base_platform);
483fad1c3fa1060 Nathan Lynch 2008-07-22 282 }
b8a61c9e7b4a0fe Eric W. Biederman 2020-05-14 283 if (bprm->have_execfd) {
b8a61c9e7b4a0fe Eric W. Biederman 2020-05-14 284 NEW_AUX_ENT(AT_EXECFD, bprm->execfd);
^1da177e4c3f415 Linus Torvalds 2005-04-16 285 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 286 #undef NEW_AUX_ENT
^1da177e4c3f415 Linus Torvalds 2005-04-16 287 /* AT_NULL is zero; clear the rest too */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 288 memset(elf_info, 0, (char *)mm->saved_auxv +
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 289 sizeof(mm->saved_auxv) - (char *)elf_info);
^1da177e4c3f415 Linus Torvalds 2005-04-16 290
^1da177e4c3f415 Linus Torvalds 2005-04-16 291 /* And advance past the AT_NULL entry. */
1f83d80677a24ae Alexey Dobriyan 2020-01-30 292 elf_info += 2;
^1da177e4c3f415 Linus Torvalds 2005-04-16 293
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 294 ei_index = elf_info - (elf_addr_t *)mm->saved_auxv;
^1da177e4c3f415 Linus Torvalds 2005-04-16 295 sp = STACK_ADD(p, ei_index);
^1da177e4c3f415 Linus Torvalds 2005-04-16 296
d20894a23708c2a Andi Kleen 2008-02-08 297 items = (argc + 1) + (envc + 1) + 1;
^1da177e4c3f415 Linus Torvalds 2005-04-16 298 bprm->p = STACK_ROUND(sp, items);
^1da177e4c3f415 Linus Torvalds 2005-04-16 299
^1da177e4c3f415 Linus Torvalds 2005-04-16 300 /* Point sp at the lowest address on the stack */
^1da177e4c3f415 Linus Torvalds 2005-04-16 301 #ifdef CONFIG_STACK_GROWSUP
^1da177e4c3f415 Linus Torvalds 2005-04-16 302 sp = (elf_addr_t __user *)bprm->p - items - ei_index;
^1da177e4c3f415 Linus Torvalds 2005-04-16 303 bprm->exec = (unsigned long)sp; /* XXX: PARISC HACK */
^1da177e4c3f415 Linus Torvalds 2005-04-16 304 #else
^1da177e4c3f415 Linus Torvalds 2005-04-16 305 sp = (elf_addr_t __user *)bprm->p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 306 #endif
^1da177e4c3f415 Linus Torvalds 2005-04-16 307
b6a2fea39318e43 Ollie Wild 2007-07-19 308
b6a2fea39318e43 Ollie Wild 2007-07-19 309 /*
b6a2fea39318e43 Ollie Wild 2007-07-19 310 * Grow the stack manually; some architectures have a limit on how
b6a2fea39318e43 Ollie Wild 2007-07-19 311 * far ahead a user-space access may be in order to grow the stack.
b6a2fea39318e43 Ollie Wild 2007-07-19 312 */
b2767d97f5ff758 Jann Horn 2020-10-17 313 if (mmap_read_lock_killable(mm))
b2767d97f5ff758 Jann Horn 2020-10-17 314 return -EINTR;
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 315 vma = find_extend_vma(mm, bprm->p);
b2767d97f5ff758 Jann Horn 2020-10-17 316 mmap_read_unlock(mm);
b6a2fea39318e43 Ollie Wild 2007-07-19 317 if (!vma)
b6a2fea39318e43 Ollie Wild 2007-07-19 318 return -EFAULT;
b6a2fea39318e43 Ollie Wild 2007-07-19 319
^1da177e4c3f415 Linus Torvalds 2005-04-16 320 /* Now, let's put argc (and argv, envp if appropriate) on the stack */
646e84deb4496e2 Al Viro 2020-02-19 321 if (put_user(argc, sp++))
^1da177e4c3f415 Linus Torvalds 2005-04-16 322 return -EFAULT;
^1da177e4c3f415 Linus Torvalds 2005-04-16 323
67c6777a5d331dd Kees Cook 2017-07-10 324 /* Populate list of argv pointers back to argv strings. */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 325 p = mm->arg_end = mm->arg_start;
^1da177e4c3f415 Linus Torvalds 2005-04-16 326 while (argc-- > 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 327 size_t len;
646e84deb4496e2 Al Viro 2020-02-19 328 if (put_user((elf_addr_t)p, sp++))
841d5fb7c75260f Heiko Carstens 2006-12-06 329 return -EFAULT;
b6a2fea39318e43 Ollie Wild 2007-07-19 330 len = strnlen_user((void __user *)p, MAX_ARG_STRLEN);
b6a2fea39318e43 Ollie Wild 2007-07-19 331 if (!len || len > MAX_ARG_STRLEN)
23c4971e3d97de4 WANG Cong 2008-05-08 332 return -EINVAL;
^1da177e4c3f415 Linus Torvalds 2005-04-16 333 p += len;
^1da177e4c3f415 Linus Torvalds 2005-04-16 334 }
646e84deb4496e2 Al Viro 2020-02-19 335 if (put_user(0, sp++))
^1da177e4c3f415 Linus Torvalds 2005-04-16 336 return -EFAULT;
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 337 mm->arg_end = p;
67c6777a5d331dd Kees Cook 2017-07-10 338
67c6777a5d331dd Kees Cook 2017-07-10 339 /* Populate list of envp pointers back to envp strings. */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 340 mm->env_end = mm->env_start = p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 341 while (envc-- > 0) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 342 size_t len;
646e84deb4496e2 Al Viro 2020-02-19 343 if (put_user((elf_addr_t)p, sp++))
841d5fb7c75260f Heiko Carstens 2006-12-06 344 return -EFAULT;
b6a2fea39318e43 Ollie Wild 2007-07-19 345 len = strnlen_user((void __user *)p, MAX_ARG_STRLEN);
b6a2fea39318e43 Ollie Wild 2007-07-19 346 if (!len || len > MAX_ARG_STRLEN)
23c4971e3d97de4 WANG Cong 2008-05-08 347 return -EINVAL;
^1da177e4c3f415 Linus Torvalds 2005-04-16 348 p += len;
^1da177e4c3f415 Linus Torvalds 2005-04-16 349 }
646e84deb4496e2 Al Viro 2020-02-19 350 if (put_user(0, sp++))
^1da177e4c3f415 Linus Torvalds 2005-04-16 351 return -EFAULT;
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 352 mm->env_end = p;
^1da177e4c3f415 Linus Torvalds 2005-04-16 353
^1da177e4c3f415 Linus Torvalds 2005-04-16 354 /* Put the elf_info on the stack in the right place. */
03c6d723eeac2d7 Alexey Dobriyan 2020-01-30 355 if (copy_to_user(sp, mm->saved_auxv, ei_index * sizeof(elf_addr_t)))
^1da177e4c3f415 Linus Torvalds 2005-04-16 356 return -EFAULT;
^1da177e4c3f415 Linus Torvalds 2005-04-16 357 return 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 358 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 359
:::::: The code at line 254 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29408 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [vfs:work.elf-compat 11/13] fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
2021-01-04 10:13 ` kernel test robot
@ 2021-01-04 23:03 ` Al Viro
-1 siblings, 0 replies; 4+ messages in thread
From: Al Viro @ 2021-01-04 23:03 UTC (permalink / raw)
To: kernel test robot; +Cc: kbuild-all, linux-fsdevel
On Mon, Jan 04, 2021 at 06:13:25PM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.elf-compat
> head: b9613abdecd9d2dae95f4712985280c80ce8e646
> commit: 5df3c15125233fbc59fd003249c381c7edd985cc [11/13] Kconfig: regularize selection of CONFIG_BINFMT_ELF
> config: x86_64-randconfig-a005-20210104 (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
> reproduce (this is a W=1 build):
> # https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git/commit/?id=5df3c15125233fbc59fd003249c381c7edd985cc
> git remote add vfs https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git
> git fetch --no-tags vfs work.elf-compat
> git checkout 5df3c15125233fbc59fd003249c381c7edd985cc
> # save the attached .config to linux build tree
> make W=1 ARCH=x86_64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All errors (new ones prefixed by >>):
>
> ld: fs/compat_binfmt_elf.o: in function `create_elf_tables':
> >> fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
> >> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
> >> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
Bloody wonderful. Background: right now in mainline selecting X32
without IA32_EMULATION ends up with being unable to execute x32
binaries. Which is the reason why that build breakage does not
happen there. It's not hard to fix (just turn the else branch of
COMPAT_ARCH_DLINFO into else if (IS_ENABLED(CONFIG_IA32_EMULATION));
absent IA32_EMULATION compat_elf_check_arch() will reject anything
that doesn't have exec->e_machine == EM_X86_64, so that else is
dead code on such configs anyway).
Let me check if such configs (X32, !IA32_EMULATION, 64bit
userland with some x32 binaries) boot and work; if that fix
is all it takes, I'll throw it into the series next to other
x32 commits...
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [vfs:work.elf-compat 11/13] fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
@ 2021-01-04 23:03 ` Al Viro
0 siblings, 0 replies; 4+ messages in thread
From: Al Viro @ 2021-01-04 23:03 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 2033 bytes --]
On Mon, Jan 04, 2021 at 06:13:25PM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.elf-compat
> head: b9613abdecd9d2dae95f4712985280c80ce8e646
> commit: 5df3c15125233fbc59fd003249c381c7edd985cc [11/13] Kconfig: regularize selection of CONFIG_BINFMT_ELF
> config: x86_64-randconfig-a005-20210104 (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
> reproduce (this is a W=1 build):
> # https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git/commit/?id=5df3c15125233fbc59fd003249c381c7edd985cc
> git remote add vfs https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git
> git fetch --no-tags vfs work.elf-compat
> git checkout 5df3c15125233fbc59fd003249c381c7edd985cc
> # save the attached .config to linux build tree
> make W=1 ARCH=x86_64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All errors (new ones prefixed by >>):
>
> ld: fs/compat_binfmt_elf.o: in function `create_elf_tables':
> >> fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
> >> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
> >> ld: fs/binfmt_elf.c:254: undefined reference to `vdso_image_32'
Bloody wonderful. Background: right now in mainline selecting X32
without IA32_EMULATION ends up with being unable to execute x32
binaries. Which is the reason why that build breakage does not
happen there. It's not hard to fix (just turn the else branch of
COMPAT_ARCH_DLINFO into else if (IS_ENABLED(CONFIG_IA32_EMULATION));
absent IA32_EMULATION compat_elf_check_arch() will reject anything
that doesn't have exec->e_machine == EM_X86_64, so that else is
dead code on such configs anyway).
Let me check if such configs (X32, !IA32_EMULATION, 64bit
userland with some x32 binaries) boot and work; if that fix
is all it takes, I'll throw it into the series next to other
x32 commits...
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-01-04 23:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-04 10:13 [vfs:work.elf-compat 11/13] fs/binfmt_elf.c:254: undefined reference to `vdso_image_32' kernel test robot
2021-01-04 10:13 ` kernel test robot
2021-01-04 23:03 ` Al Viro
2021-01-04 23:03 ` Al Viro
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.