#include <linux/personality.h>
  #include <linux/backing-dev.h>
  #include <linux/string.h>
+ #include <linux/xattr.h>
  #include <linux/msg.h>
 +#include <linux/overflow.h>
  #include <net/flow.h>
  
  /* How many LSMs were built into the kernel? */
  }
  
  /**
 - * security_bpf_map_alloc() - Allocate a bpf map LSM blob
 - * @map: bpf map
 + * security_bpf_map_create() - Check if BPF map creation is allowed
 + * @map: BPF map object
 + * @attr: BPF syscall attributes used to create BPF map
 + * @token: BPF token used to grant user access
 + *
 + * Do a check when the kernel creates a new BPF map. This is also the
 + * point where LSM blob is allocated for LSMs that need them.
 + *
 + * Return: Returns 0 on success, error on failure.
 + */
 +int security_bpf_map_create(struct bpf_map *map, union bpf_attr *attr,
 +                          struct bpf_token *token)
 +{
-       return call_int_hook(bpf_map_create, 0, map, attr, token);
++      return call_int_hook(bpf_map_create, map, attr, token);
 +}
 +
 +/**
 + * security_bpf_prog_load() - Check if loading of BPF program is allowed
 + * @prog: BPF program object
 + * @attr: BPF syscall attributes used to create BPF program
 + * @token: BPF token used to grant user access to BPF subsystem
   *
 - * Initialize the security field inside bpf map.
 + * Perform an access control check when the kernel loads a BPF program and
 + * allocates associated BPF program object. This hook is also responsible for
 + * allocating any required LSM state for the BPF program.
   *
   * Return: Returns 0 on success, error on failure.
   */
 -int security_bpf_map_alloc(struct bpf_map *map)
 +int security_bpf_prog_load(struct bpf_prog *prog, union bpf_attr *attr,
 +                         struct bpf_token *token)
  {
-       return call_int_hook(bpf_prog_load, 0, prog, attr, token);
 -      return call_int_hook(bpf_map_alloc_security, map);
++      return call_int_hook(bpf_prog_load, prog, attr, token);
  }
  
  /**
   *
   * Return: Returns 0 on success, error on failure.
   */
 -int security_bpf_prog_alloc(struct bpf_prog_aux *aux)
 +int security_bpf_token_create(struct bpf_token *token, union bpf_attr *attr,
 +                            struct path *path)
  {
-       return call_int_hook(bpf_token_create, 0, token, attr, path);
 -      return call_int_hook(bpf_prog_alloc_security, aux);
++      return call_int_hook(bpf_token_create, token, attr, path);
 +}
 +
 +/**
 + * security_bpf_token_cmd() - Check if BPF token is allowed to delegate
 + * requested BPF syscall command
 + * @token: BPF token object
 + * @cmd: BPF syscall command requested to be delegated by BPF token
 + *
 + * Do a check when the kernel decides whether provided BPF token should allow
 + * delegation of requested BPF syscall command.
 + *
 + * Return: Returns 0 on success, error on failure.
 + */
 +int security_bpf_token_cmd(const struct bpf_token *token, enum bpf_cmd cmd)
 +{
-       return call_int_hook(bpf_token_cmd, 0, token, cmd);
++      return call_int_hook(bpf_token_cmd, token, cmd);
 +}
 +
 +/**
 + * security_bpf_token_capable() - Check if BPF token is allowed to delegate
 + * requested BPF-related capability
 + * @token: BPF token object
 + * @cap: capabilities requested to be delegated by BPF token
 + *
 + * Do a check when the kernel decides whether provided BPF token should allow
 + * delegation of requested BPF-related capabilities.
 + *
 + * Return: Returns 0 on success, error on failure.
 + */
 +int security_bpf_token_capable(const struct bpf_token *token, int cap)
 +{
-       return call_int_hook(bpf_token_capable, 0, token, cap);
++      return call_int_hook(bpf_token_capable, token, cap);
  }
  
  /**