summaryrefslogtreecommitdiffstats
path: root/src/image/pem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/image/pem.c')
-rw-r--r--src/image/pem.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/image/pem.c b/src/image/pem.c
index 2dcc36442..0fea5fbea 100644
--- a/src/image/pem.c
+++ b/src/image/pem.c
@@ -22,13 +22,13 @@
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+FILE_SECBOOT ( PERMITTED );
#include <stdlib.h>
#include <errno.h>
#include <assert.h>
#include <ipxe/asn1.h>
#include <ipxe/base64.h>
-#include <ipxe/uaccess.h>
#include <ipxe/image.h>
#include <ipxe/pem.h>
@@ -46,14 +46,14 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
* @v offset Starting offset
* @ret next Offset to next line
*/
-static size_t pem_next ( userptr_t data, size_t len, size_t offset ) {
- off_t eol;
+static size_t pem_next ( const void *data, size_t len, size_t offset ) {
+ const void *sep;
/* Find and skip next newline character, if any */
- eol = memchr_user ( data, offset, '\n', ( len - offset ) );
- if ( eol < 0 )
+ sep = memchr ( ( data + offset ), '\n', ( len - offset ) );
+ if ( ! sep )
return len;
- return ( eol + 1 );
+ return ( ( sep - data ) + 1 );
}
/**
@@ -65,9 +65,9 @@ static size_t pem_next ( userptr_t data, size_t len, size_t offset ) {
* @v marker Boundary marker
* @ret offset Offset to boundary marker line, or negative error
*/
-static int pem_marker ( userptr_t data, size_t len, size_t offset,
+static int pem_marker ( const void *data, size_t len, size_t offset,
const char *marker ) {
- char buf[ strlen ( marker ) ];
+ size_t marker_len = strlen ( marker );
/* Sanity check */
assert ( offset <= len );
@@ -76,10 +76,9 @@ static int pem_marker ( userptr_t data, size_t len, size_t offset,
while ( offset < len ) {
/* Check for marker */
- if ( ( len - offset ) < sizeof ( buf ) )
+ if ( ( len - offset ) < marker_len )
break;
- copy_from_user ( buf, data, offset, sizeof ( buf ) );
- if ( memcmp ( buf, marker, sizeof ( buf ) ) == 0 )
+ if ( memcmp ( ( data + offset ), marker, marker_len ) == 0 )
return offset;
/* Move to next line */
@@ -102,7 +101,7 @@ static int pem_marker ( userptr_t data, size_t len, size_t offset,
* The caller is responsible for eventually calling free() on the
* allocated ASN.1 cursor.
*/
-int pem_asn1 ( userptr_t data, size_t len, size_t offset,
+int pem_asn1 ( const void *data, size_t len, size_t offset,
struct asn1_cursor **cursor ) {
size_t encoded_len;
size_t decoded_max_len;
@@ -140,7 +139,7 @@ int pem_asn1 ( userptr_t data, size_t len, size_t offset,
rc = -ENOMEM;
goto err_alloc_encoded;
}
- copy_from_user ( encoded, data, begin, encoded_len );
+ memcpy ( encoded, ( data + begin ), encoded_len );
encoded[encoded_len] = '\0';
/* Allocate cursor and data buffer */