s390 updates for 5.4-rc5

- Add R_390_GLOB_DAT relocation type support. This fixes boot problem
   on linux-next.
 
 - Fix memory leak in zcrypt.
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCAAdFiEE3QHqV+H2a8xAv27vjYWKoQLXFBgFAl20GckACgkQjYWKoQLX
 FBjMdAf9Ff/2AOphOTgkhb4rTM4iVBCR89f5XvsDiJsgYjfJJcr/iWlyu5/j83et
 3mgAsg4DlsCum3XV6cYJ9hmVfFuSMiO04tWuQ0BOyc+s5LZrytvvqmtI7wkDvj8W
 2L7LJ3hPJVDsEJQNKg8aixmGXkA8aa34JiXdDkDKzLIoW0Gs6Zybf5JpXAFZxQtM
 fFUYuDSE2qPPOOJYZTQgIvqjGH6EIleyWxWgLTKbIodlnqJIp7kfujxdkn08SbxF
 3CRIMxujm4yGn0ETDOXyYYGtZtOSQTiIgDIlEMca4dK50ZEP6eyygXy6kDbMXAyj
 1SMvZm+NohO/UmLrafiFriiLnLiMrg==
 =wcZ9
 -----END PGP SIGNATURE-----

Merge tag 's390-5.4-5' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 fixes from Vasily Gorbik:

 - Add R_390_GLOB_DAT relocation type support. This fixes boot problem
   on linux-next.

 - Fix memory leak in zcrypt

* tag 's390-5.4-5' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/kaslr: add support for R_390_GLOB_DAT relocation type
  s390/zcrypt: fix memleak at release
This commit is contained in:
Linus Torvalds 2019-10-26 06:35:46 -04:00
commit f877bee5ea
3 changed files with 13 additions and 5 deletions

View File

@ -101,10 +101,18 @@ static void handle_relocs(unsigned long offset)
dynsym = (Elf64_Sym *) vmlinux.dynsym_start; dynsym = (Elf64_Sym *) vmlinux.dynsym_start;
for (rela = rela_start; rela < rela_end; rela++) { for (rela = rela_start; rela < rela_end; rela++) {
loc = rela->r_offset + offset; loc = rela->r_offset + offset;
val = rela->r_addend + offset; val = rela->r_addend;
r_sym = ELF64_R_SYM(rela->r_info); r_sym = ELF64_R_SYM(rela->r_info);
if (r_sym) if (r_sym) {
val += dynsym[r_sym].st_value; if (dynsym[r_sym].st_shndx != SHN_UNDEF)
val += dynsym[r_sym].st_value + offset;
} else {
/*
* 0 == undefined symbol table index (STN_UNDEF),
* used for R_390_RELATIVE, only add KASLR offset
*/
val += offset;
}
r_type = ELF64_R_TYPE(rela->r_info); r_type = ELF64_R_TYPE(rela->r_info);
rc = arch_kexec_do_relocs(r_type, (void *) loc, val, 0); rc = arch_kexec_do_relocs(r_type, (void *) loc, val, 0);
if (rc) if (rc)

View File

@ -27,6 +27,7 @@ int arch_kexec_do_relocs(int r_type, void *loc, unsigned long val,
*(u32 *)loc = val; *(u32 *)loc = val;
break; break;
case R_390_64: /* Direct 64 bit. */ case R_390_64: /* Direct 64 bit. */
case R_390_GLOB_DAT:
*(u64 *)loc = val; *(u64 *)loc = val;
break; break;
case R_390_PC16: /* PC relative 16 bit. */ case R_390_PC16: /* PC relative 16 bit. */

View File

@ -522,8 +522,7 @@ static int zcrypt_release(struct inode *inode, struct file *filp)
if (filp->f_inode->i_cdev == &zcrypt_cdev) { if (filp->f_inode->i_cdev == &zcrypt_cdev) {
struct zcdn_device *zcdndev; struct zcdn_device *zcdndev;
if (mutex_lock_interruptible(&ap_perms_mutex)) mutex_lock(&ap_perms_mutex);
return -ERESTARTSYS;
zcdndev = find_zcdndev_by_devt(filp->f_inode->i_rdev); zcdndev = find_zcdndev_by_devt(filp->f_inode->i_rdev);
mutex_unlock(&ap_perms_mutex); mutex_unlock(&ap_perms_mutex);
if (zcdndev) { if (zcdndev) {