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