108 size_t decoded_max_len;
120 DBGC (
data,
"PEM [%#zx,%#zx) missing BEGIN marker: %s\n",
130 DBGC (
data,
"PEM [%#zx,%#zx) missing END marker: %s\n",
134 encoded_len = (
end - begin );
138 encoded =
malloc ( encoded_len + 1 );
141 goto err_alloc_encoded;
144 encoded[encoded_len] =
'\0';
148 *cursor =
malloc (
sizeof ( **cursor ) + decoded_max_len );
151 goto err_alloc_cursor;
153 decoded = ( ( (
void * ) *cursor ) +
sizeof ( **cursor ) );
156 decoded_len =
base64_decode ( encoded, decoded, decoded_max_len );
157 if ( decoded_len < 0 ) {
162 (*cursor)->data = decoded;
163 (*cursor)->len = decoded_len;
164 assert ( (*cursor)->len <= decoded_max_len );
201 DBGC (
image,
"PEM %s has no BEGIN marker: %s\n",
229 DBGC (
image,
"PEM %s could not extract ASN.1: %s\n",
struct arbelprm_rc_send_wqe rc
userptr_t data
Raw file image.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
uint32_t next
Next descriptor address.
off_t memchr_user(userptr_t userptr, off_t offset, int c, size_t len)
Find character in user buffer.
static __always_inline void copy_from_user(void *dest, userptr_t src, off_t src_off, size_t len)
Copy data from user buffer.
An executable image type.
#define ENOENT
No such file or directory.
#define PROBE_NORMAL
Normal image probe priority.
int base64_decode(const char *encoded, void *data, size_t len)
Base64-decode string.
Access to external ("user") memory.
struct image_type pem_image_type __image_type(PROBE_NORMAL)
PEM image type.
char * name
Name of this image type.
#define ENOMEM
Not enough space.
static size_t base64_decoded_max_len(const char *encoded)
Calculate maximum length of base64-decoded string.
uint32_t userptr_t
A pointer to a user buffer.
static int pem_image_asn1(struct image *image, size_t offset, struct asn1_cursor **cursor)
Extract ASN.1 object from image.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
static int pem_marker(userptr_t data, size_t len, size_t offset, const char *marker)
Locate boundary marker line.
char * strerror(int errno)
Retrieve string representation of error number.
static void(* free)(struct refcnt *refcnt))
size_t len
Length of raw file image.
size_t strlen(const char *src)
Get length of string.
void * malloc(size_t size)
Allocate memory.
static size_t pem_next(userptr_t data, size_t len, size_t offset)
Locate next line.
#define PEM_END
Post-encapsulation boundary marker.
int pem_asn1(userptr_t data, size_t len, size_t offset, struct asn1_cursor **cursor)
Extract ASN.1 object from PEM data.
uint32_t end
Ending offset.
uint8_t data[48]
Additional event data.
static int pem_image_probe(struct image *image)
Probe PEM image.
uint16_t offset
Offset to command line.
#define PEM_BEGIN
Pre-encapsulation boundary marker.
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
#define NULL
NULL pointer (VOID *)
struct eth_slow_marker_tlv marker
Marker information.