194c3aac5SMimi Zohar /* 294c3aac5SMimi Zohar * Copyright (C) 2016 IBM Corporation 394c3aac5SMimi Zohar * 494c3aac5SMimi Zohar * Authors: 594c3aac5SMimi Zohar * Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> 694c3aac5SMimi Zohar * Mimi Zohar <zohar@linux.vnet.ibm.com> 794c3aac5SMimi Zohar * 894c3aac5SMimi Zohar * This program is free software; you can redistribute it and/or modify 994c3aac5SMimi Zohar * it under the terms of the GNU General Public License as published by 1094c3aac5SMimi Zohar * the Free Software Foundation; either version 2 of the License, or 1194c3aac5SMimi Zohar * (at your option) any later version. 1294c3aac5SMimi Zohar */ 1394c3aac5SMimi Zohar #include "ima.h" 1494c3aac5SMimi Zohar 1594c3aac5SMimi Zohar /* 1694c3aac5SMimi Zohar * Restore the measurement list from the previous kernel. 1794c3aac5SMimi Zohar */ 1894c3aac5SMimi Zohar void ima_load_kexec_buffer(void) 1994c3aac5SMimi Zohar { 2094c3aac5SMimi Zohar void *kexec_buffer = NULL; 2194c3aac5SMimi Zohar size_t kexec_buffer_size = 0; 2294c3aac5SMimi Zohar int rc; 2394c3aac5SMimi Zohar 2494c3aac5SMimi Zohar rc = ima_get_kexec_buffer(&kexec_buffer, &kexec_buffer_size); 2594c3aac5SMimi Zohar switch (rc) { 2694c3aac5SMimi Zohar case 0: 2794c3aac5SMimi Zohar rc = ima_restore_measurement_list(kexec_buffer_size, 2894c3aac5SMimi Zohar kexec_buffer); 2994c3aac5SMimi Zohar if (rc != 0) 3094c3aac5SMimi Zohar pr_err("Failed to restore the measurement list: %d\n", 3194c3aac5SMimi Zohar rc); 3294c3aac5SMimi Zohar 3394c3aac5SMimi Zohar ima_free_kexec_buffer(); 3494c3aac5SMimi Zohar break; 3594c3aac5SMimi Zohar case -ENOTSUPP: 3694c3aac5SMimi Zohar pr_debug("Restoring the measurement list not supported\n"); 3794c3aac5SMimi Zohar break; 3894c3aac5SMimi Zohar case -ENOENT: 3994c3aac5SMimi Zohar pr_debug("No measurement list to restore\n"); 4094c3aac5SMimi Zohar break; 4194c3aac5SMimi Zohar default: 4294c3aac5SMimi Zohar pr_debug("Error restoring the measurement list: %d\n", rc); 4394c3aac5SMimi Zohar } 4494c3aac5SMimi Zohar } 45