121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* 221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Copyright (C) 2016 The Android Open Source Project 321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 4c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * Permission is hereby granted, free of charge, to any person 5c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * obtaining a copy of this software and associated documentation 6c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * files (the "Software"), to deal in the Software without 7c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * restriction, including without limitation the rights to use, copy, 8c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * modify, merge, publish, distribute, sublicense, and/or sell copies 9c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * of the Software, and to permit persons to whom the Software is 10c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * furnished to do so, subject to the following conditions: 1121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 12c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * The above copyright notice and this permission notice shall be 13c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * included in all copies or substantial portions of the Software. 1421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 15c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 19c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 20c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22c612e2e353444f6ad714e43702c2afd057516254David Zeuthen * SOFTWARE. 2321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 2421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 2521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#if !defined(AVB_INSIDE_LIBAVB_H) && !defined(AVB_COMPILATION) 2621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#error "Never include this file directly, include libavb.h instead." 2721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif 2821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 2921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#ifndef AVB_KERNEL_CMDLINE_DESCRIPTOR_H_ 3021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#define AVB_KERNEL_CMDLINE_DESCRIPTOR_H_ 3121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 3221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#include "avb_descriptor.h" 3321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 3421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#ifdef __cplusplus 3521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenextern "C" { 3621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif 3721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 38fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen/* Flags for kernel command-line descriptors. 39fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * 40fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_NOT_DISABLED: The 41fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * cmdline will only be applied if hashtree verification is not 42fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * disabled (cf. AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED). 43fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * 44fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_DISABLED: The cmdline 45fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * will only be applied if hashtree verification is disabled 46fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * (cf. AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED). 47fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen */ 48fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthentypedef enum { 49fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_NOT_DISABLED = (1 << 0), 50fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen AVB_KERNEL_CMDLINE_FLAGS_USE_ONLY_IF_HASHTREE_DISABLED = (1 << 1) 51fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen} AvbKernelCmdlineFlags; 52fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen 5321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* A descriptor containing information to be appended to the kernel 5421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * command-line. 5521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 56fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * The |flags| field contains flags from the AvbKernelCmdlineFlags 57fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * enumeration. 58fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen * 5921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Following this struct are |kernel_cmdline_len| bytes with the 6021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * kernel command-line (UTF-8 encoded). 6121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 6221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthentypedef struct AvbKernelCmdlineDescriptor { 6321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen AvbDescriptor parent_descriptor; 64fd41eb9a7848ad8d2ae0a80186e461741bf134f1David Zeuthen uint32_t flags; 6521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen uint32_t kernel_cmdline_length; 6621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen} AVB_ATTR_PACKED AvbKernelCmdlineDescriptor; 6721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 6821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen/* Copies |src| to |dest| and validates, byte-swapping fields in the 6921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * process if needed. Returns true if valid, false if invalid. 7021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * 7121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen * Data following the struct is not validated nor copied. 7221e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen */ 7321e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthenbool avb_kernel_cmdline_descriptor_validate_and_byteswap( 7421e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen const AvbKernelCmdlineDescriptor* src, 7521e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen AvbKernelCmdlineDescriptor* dest) AVB_ATTR_WARN_UNUSED_RESULT; 7621e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 7721e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#ifdef __cplusplus 7821e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen} 7921e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif 8021e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen 8121e95266704e572ced1c633bbc4aea9f42afa0a5David Zeuthen#endif /* AVB_KERNEL_CMDLINE_DESCRIPTOR_H_ */ 82