Skip to content

Commit f877bee

Browse files
committed
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
2 parents 4fac240 + ac49303 commit f877bee

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

arch/s390/boot/startup.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,18 @@ static void handle_relocs(unsigned long offset)
101101
dynsym = (Elf64_Sym *) vmlinux.dynsym_start;
102102
for (rela = rela_start; rela < rela_end; rela++) {
103103
loc = rela->r_offset + offset;
104-
val = rela->r_addend + offset;
104+
val = rela->r_addend;
105105
r_sym = ELF64_R_SYM(rela->r_info);
106-
if (r_sym)
107-
val += dynsym[r_sym].st_value;
106+
if (r_sym) {
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+
}
108116
r_type = ELF64_R_TYPE(rela->r_info);
109117
rc = arch_kexec_do_relocs(r_type, (void *) loc, val, 0);
110118
if (rc)

arch/s390/kernel/machine_kexec_reloc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ int arch_kexec_do_relocs(int r_type, void *loc, unsigned long val,
2727
*(u32 *)loc = val;
2828
break;
2929
case R_390_64: /* Direct 64 bit. */
30+
case R_390_GLOB_DAT:
3031
*(u64 *)loc = val;
3132
break;
3233
case R_390_PC16: /* PC relative 16 bit. */

drivers/s390/crypto/zcrypt_api.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,8 +522,7 @@ static int zcrypt_release(struct inode *inode, struct file *filp)
522522
if (filp->f_inode->i_cdev == &zcrypt_cdev) {
523523
struct zcdn_device *zcdndev;
524524

525-
if (mutex_lock_interruptible(&ap_perms_mutex))
526-
return -ERESTARTSYS;
525+
mutex_lock(&ap_perms_mutex);
527526
zcdndev = find_zcdndev_by_devt(filp->f_inode->i_rdev);
528527
mutex_unlock(&ap_perms_mutex);
529528
if (zcdndev) {

0 commit comments

Comments
 (0)