History

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

Linus Torvalds committed 7 years ago

Commit f877bee2 parents 4fac240 ac493033 files · +13 −5Browse files

Unified · Split

3 files
  1. arch/s390/boot/startup.c +11 −3
  2. arch/s390/kernel/machine_kexec_reloc.c +1 −0
  3. drivers/s390/crypto/zcrypt_api.c +1 −2
arch/s390/boot/startup.c+11−3
@@ -101,10 +101,18 @@ static void handle_relocs(unsigned long offset) · 100 unmodified lines
101 dynsym = (Elf64_Sym *) vmlinux.dynsym_start;101 dynsym = (Elf64_Sym *) vmlinux.dynsym_start;
102 for (rela = rela_start; rela < rela_end; rela++) {102 for (rela = rela_start; rela < rela_end; rela++) {
103 loc = rela->r_offset + offset;103 loc = rela->r_offset + offset;
104 val = rela->r_addend + offset;104 val = rela->r_addend;
105 r_sym = ELF64_R_SYM(rela->r_info);105 r_sym = ELF64_R_SYM(rela->r_info);
106 if (r_sym)106 if (r_sym) {
107 val += dynsym[r_sym].st_value;107 if (dynsym[r_sym].st_shndx != SHN_UNDEF)
108 val += dynsym[r_sym].st_value + offset;
109 } else {
110 /*
111 * 0 == undefined symbol table index (STN_UNDEF),
112 * used for R_390_RELATIVE, only add KASLR offset
113 */
114 val += offset;
115 }
108 r_type = ELF64_R_TYPE(rela->r_info);116 r_type = ELF64_R_TYPE(rela->r_info);
109 rc = arch_kexec_do_relocs(r_type, (void *) loc, val, 0);117 rc = arch_kexec_do_relocs(r_type, (void *) loc, val, 0);
110 if (rc)118 if (rc)
arch/s390/kernel/machine_kexec_reloc.c+1−0
@@ -27,6 +27,7 @@ int arch_kexec_do_relocs(int r_type, void *loc, unsigned long val, · 26 unmodified lines
27 *(u32 *)loc = val;27 *(u32 *)loc = val;
28 break;28 break;
29 case R_390_64: /* Direct 64 bit. */29 case R_390_64: /* Direct 64 bit. */
30 case R_390_GLOB_DAT:
30 *(u64 *)loc = val;31 *(u64 *)loc = val;
31 break;32 break;
32 case R_390_PC16: /* PC relative 16 bit. */33 case R_390_PC16: /* PC relative 16 bit. */
drivers/s390/crypto/zcrypt_api.c+1−2
@@ -522,8 +522,7 @@ static int zcrypt_release(struct inode *inode, struct file *filp) · 521 unmodified lines
522 if (filp->f_inode->i_cdev == &zcrypt_cdev) {522 if (filp->f_inode->i_cdev == &zcrypt_cdev) {
523 struct zcdn_device *zcdndev;523 struct zcdn_device *zcdndev;
524 524
525 if (mutex_lock_interruptible(&ap_perms_mutex))525 mutex_lock(&ap_perms_mutex);
526 return -ERESTARTSYS;
527 zcdndev = find_zcdndev_by_devt(filp->f_inode->i_rdev);526 zcdndev = find_zcdndev_by_devt(filp->f_inode->i_rdev);
528 mutex_unlock(&ap_perms_mutex);527 mutex_unlock(&ap_perms_mutex);
529 if (zcdndev) {528 if (zcdndev) {