mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
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:
commit
f877bee5ea
@ -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)
|
||||||
|
@ -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. */
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user