mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
Merge tag 'v4.9.154' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.154 stable release
This commit is contained in:
@@ -42,13 +42,13 @@ static int __report_module(struct addr_location *al, u64 ip,
|
||||
Dwarf_Addr s;
|
||||
|
||||
dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
|
||||
if (s != al->map->start)
|
||||
if (s != al->map->start - al->map->pgoff)
|
||||
mod = 0;
|
||||
}
|
||||
|
||||
if (!mod)
|
||||
mod = dwfl_report_elf(ui->dwfl, dso->short_name,
|
||||
dso->long_name, -1, al->map->start,
|
||||
(dso->symsrc_filename ? dso->symsrc_filename : dso->long_name), -1, al->map->start - al->map->pgoff,
|
||||
false);
|
||||
|
||||
return mod && dwfl_addrmodule(ui->dwfl, ip) == mod ? 0 : -1;
|
||||
|
||||
@@ -1129,6 +1129,21 @@ void test_pkey_syscalls_bad_args(int *ptr, u16 pkey)
|
||||
pkey_assert(err);
|
||||
}
|
||||
|
||||
void become_child(void)
|
||||
{
|
||||
pid_t forkret;
|
||||
|
||||
forkret = fork();
|
||||
pkey_assert(forkret >= 0);
|
||||
dprintf3("[%d] fork() ret: %d\n", getpid(), forkret);
|
||||
|
||||
if (!forkret) {
|
||||
/* in the child */
|
||||
return;
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* Assumes that all pkeys other than 'pkey' are unallocated */
|
||||
void test_pkey_alloc_exhaust(int *ptr, u16 pkey)
|
||||
{
|
||||
@@ -1139,7 +1154,7 @@ void test_pkey_alloc_exhaust(int *ptr, u16 pkey)
|
||||
int nr_allocated_pkeys = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NR_PKEYS*2; i++) {
|
||||
for (i = 0; i < NR_PKEYS*3; i++) {
|
||||
int new_pkey;
|
||||
dprintf1("%s() alloc loop: %d\n", __func__, i);
|
||||
new_pkey = alloc_pkey();
|
||||
@@ -1150,20 +1165,26 @@ void test_pkey_alloc_exhaust(int *ptr, u16 pkey)
|
||||
if ((new_pkey == -1) && (errno == ENOSPC)) {
|
||||
dprintf2("%s() failed to allocate pkey after %d tries\n",
|
||||
__func__, nr_allocated_pkeys);
|
||||
break;
|
||||
} else {
|
||||
/*
|
||||
* Ensure the number of successes never
|
||||
* exceeds the number of keys supported
|
||||
* in the hardware.
|
||||
*/
|
||||
pkey_assert(nr_allocated_pkeys < NR_PKEYS);
|
||||
allocated_pkeys[nr_allocated_pkeys++] = new_pkey;
|
||||
}
|
||||
pkey_assert(nr_allocated_pkeys < NR_PKEYS);
|
||||
allocated_pkeys[nr_allocated_pkeys++] = new_pkey;
|
||||
|
||||
/*
|
||||
* Make sure that allocation state is properly
|
||||
* preserved across fork().
|
||||
*/
|
||||
if (i == NR_PKEYS*2)
|
||||
become_child();
|
||||
}
|
||||
|
||||
dprintf3("%s()::%d\n", __func__, __LINE__);
|
||||
|
||||
/*
|
||||
* ensure it did not reach the end of the loop without
|
||||
* failure:
|
||||
*/
|
||||
pkey_assert(i < NR_PKEYS*2);
|
||||
|
||||
/*
|
||||
* There are 16 pkeys supported in hardware. One is taken
|
||||
* up for the default (0) and another can be taken up by
|
||||
|
||||
Reference in New Issue
Block a user