security/apparmor/crypto.c
Source file repositories/reference/linux-study-clean/security/apparmor/crypto.c
File Facts
- System
- Linux kernel
- Corpus path
security/apparmor/crypto.c- Extension
.c- Size
- 1300 bytes
- Lines
- 62
- Domain
- Core OS
- Bucket
- Security And Isolation
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
crypto/sha2.hinclude/apparmor.hinclude/crypto.h
Detected Declarations
function aa_hash_sizefunction aa_calc_profile_hashfunction init_profile_hash
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* AppArmor security module
*
* This file contains AppArmor policy loading interface function definitions.
*
* Copyright 2013 Canonical Ltd.
*
* Fns to provide a checksum of policy that has been loaded this can be
* compared to userspace policy compiles to check loaded policy is what
* it should be.
*/
#include <crypto/sha2.h>
#include "include/apparmor.h"
#include "include/crypto.h"
unsigned int aa_hash_size(void)
{
return SHA256_DIGEST_SIZE;
}
char *aa_calc_hash(void *data, size_t len)
{
char *hash;
hash = kzalloc(SHA256_DIGEST_SIZE, GFP_KERNEL);
if (!hash)
return ERR_PTR(-ENOMEM);
sha256(data, len, hash);
return hash;
}
int aa_calc_profile_hash(struct aa_profile *profile, u32 version, void *start,
size_t len)
{
struct sha256_ctx sctx;
__le32 le32_version = cpu_to_le32(version);
if (!aa_g_hash_policy)
return 0;
profile->hash = kzalloc(SHA256_DIGEST_SIZE, GFP_KERNEL);
if (!profile->hash)
return -ENOMEM;
sha256_init(&sctx);
sha256_update(&sctx, (u8 *)&le32_version, 4);
sha256_update(&sctx, (u8 *)start, len);
sha256_final(&sctx, profile->hash);
return 0;
}
int __init init_profile_hash(void)
{
if (apparmor_initialized)
aa_info_message("AppArmor sha256 policy hashing enabled");
return 0;
}
Annotation
- Immediate include surface: `crypto/sha2.h`, `include/apparmor.h`, `include/crypto.h`.
- Detected declarations: `function aa_hash_size`, `function aa_calc_profile_hash`, `function init_profile_hash`.
- Atlas domain: Core OS / Security And Isolation.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.