xfrm: Provide API to register translator module
Add a skeleton for xfrm_compat module and provide API to register it in xfrm_state.ko. struct xfrm_translator will have function pointers to translate messages received from 32-bit userspace or to be sent to it from 64-bit kernel. module_get()/module_put() are used instead of rcu_read_lock() as the module will vmalloc() memory for translation. The new API is registered with xfrm_state module, not with xfrm_user as the former needs translator for user_policy set by setsockopt() and xfrm_user already uses functions from xfrm_state. Signed-off-by: Dmitry Safonov <dima@arista.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:

committed by
Steffen Klassert

parent
02a20d4fef
commit
c9e7c76d70
@@ -2000,6 +2000,25 @@ static inline int xfrm_tunnel_check(struct sk_buff *skb, struct xfrm_state *x,
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct xfrm_translator {
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_XFRM_USER_COMPAT)
|
||||
extern int xfrm_register_translator(struct xfrm_translator *xtr);
|
||||
extern int xfrm_unregister_translator(struct xfrm_translator *xtr);
|
||||
extern struct xfrm_translator *xfrm_get_translator(void);
|
||||
extern void xfrm_put_translator(struct xfrm_translator *xtr);
|
||||
#else
|
||||
static inline struct xfrm_translator *xfrm_get_translator(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline void xfrm_put_translator(struct xfrm_translator *xtr)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static inline bool xfrm6_local_dontfrag(const struct sock *sk)
|
||||
{
|
||||
|
Reference in New Issue
Block a user