libcamera: ipa_module: Load IPA module signature
Load the signature from the .sign file, if available, when loading the IPA module information and store it in the IPAModule class. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
@@ -7,7 +7,9 @@
|
||||
#ifndef __LIBCAMERA_IPA_MODULE_H__
|
||||
#define __LIBCAMERA_IPA_MODULE_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <ipa/ipa_interface.h>
|
||||
#include <ipa/ipa_module_info.h>
|
||||
@@ -25,6 +27,7 @@ public:
|
||||
bool isValid() const;
|
||||
|
||||
const struct IPAModuleInfo &info() const;
|
||||
const std::vector<uint8_t> signature() const;
|
||||
const std::string &path() const;
|
||||
|
||||
bool load();
|
||||
@@ -38,6 +41,7 @@ public:
|
||||
|
||||
private:
|
||||
struct IPAModuleInfo info_;
|
||||
std::vector<uint8_t> signature_;
|
||||
|
||||
std::string libPath_;
|
||||
bool valid_;
|
||||
|
||||
@@ -308,6 +308,20 @@ int IPAModule::loadIPAModuleInfo()
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Load the signature. Failures are not fatal. */
|
||||
File sign{ libPath_ + ".sign" };
|
||||
if (!sign.open(File::ReadOnly)) {
|
||||
LOG(IPAModule, Debug)
|
||||
<< "IPA module " << libPath_ << " is not signed";
|
||||
return 0;
|
||||
}
|
||||
|
||||
data = sign.map(0, -1, File::MapPrivate);
|
||||
signature_.resize(data.size());
|
||||
memcpy(signature_.data(), data.data(), data.size());
|
||||
|
||||
LOG(IPAModule, Debug) << "IPA module " << libPath_ << " is signed";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -339,6 +353,21 @@ const struct IPAModuleInfo &IPAModule::info() const
|
||||
return info_;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Retrieve the IPA module signature
|
||||
*
|
||||
* The IPA module signature is stored alongside the IPA module in a file with a
|
||||
* '.sign' suffix, and is loaded when the IPAModule instance is created. This
|
||||
* function returns the signature without verifying it. If the signature is
|
||||
* missing, the returned vector will be empty.
|
||||
*
|
||||
* \return The IPA module signature
|
||||
*/
|
||||
const std::vector<uint8_t> IPAModule::signature() const
|
||||
{
|
||||
return signature_;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Retrieve the IPA module path
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user