#ifndef GEOIPH_H #define GEOIPH_H #include #include #include "config.h" #include "die.h" #if defined(HAVE_GEOIP) && defined(HAVE_LIBZ) extern void init_geoip(int enforce); extern void update_geoip(void); extern int geoip_working(void); extern const char *geoip4_city_name(struct sockaddr_in *sa); extern const char *geoip6_city_name(struct sockaddr_in6 *sa); extern const char *geoip4_region_name(struct sockaddr_in *sa); extern const char *geoip6_region_name(struct sockaddr_in6 *sa); extern const char *geoip4_country_name(struct sockaddr_in *sa); extern const char *geoip6_country_name(struct sockaddr_in6 *sa); extern const char *geoip4_country_code3_name(struct sockaddr_in *sa); extern const char *geoip6_country_code3_name(struct sockaddr_in6 *sa); extern float geoip4_longitude(struct sockaddr_in *sa); extern float geoip4_latitude(struct sockaddr_in *sa); extern float geoip6_longitude(struct sockaddr_in6 *sa); extern float geoip6_latitude(struct sockaddr_in6 *sa); extern const char *geoip4_as_name(struct sockaddr_in *sa); extern const char *geoip6_as_name(struct sockaddr_in6 *sa); extern void destroy_geoip(void); #else static inline void init_geoip(int enforce) { } static inline void destroy_geoip(void) { } static inline void update_geoip(void) { panic("No built-in geoip support!\n"); } static inline int geoip_working(void) { return 0; } static inline const char *geoip4_city_name(struct sockaddr_in *sa) { return NULL; } static inline const char *geoip6_city_name(struct sockaddr_in6 *sa) { return NULL; } static inline const char *geoip4_region_name(struct sockaddr_in *sa) { return NULL; } static inline const char *geoip6_region_name(struct sockaddr_in6 *sa) { return NULL; } static inline const char *geoip4_country_name(struct sockaddr_in *sa) { return NULL; } static inline const char *geoip6_country_name(struct sockaddr_in6 *sa) { return NULL; } static inline float geoip4_longitude(struct sockaddr_in *sa) { return .0f; } static inline float geoip4_latitude(struct sockaddr_in *sa) { return .0f; } static inline float geoip6_longitude(struct sockaddr_in6 *sa) { return .0f; } static inline float geoip6_latitude(struct sockaddr_in6 *sa) { return .0f; } static inline const char *geoip4_as_name(struct sockaddr_in *sa) { return NULL; } static inline const char *geoip6_as_name(struct sockaddr_in6 *sa) { return NULL; } static inline const char *geoip4_country_code3_name(struct sockaddr_in *sa) { return NULL; } static inline const char *geoip6_country_code3_name(struct sockaddr_in6 *sa) { return NULL; } #endif #endif /* GEOIPH_H */ v class='content'>
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/x86/kernel-stacks')
0
space:
mode:
authorMiroslav Benes <mbenes@suse.cz>2016-04-28 16:34:08 +0200
committerJiri Kosina <jkosina@suse.cz>2016-04-30 00:04:08 +0200
commitf09d90864eb7cc00cadbbfd083b4eff84c167981 (patch)
tree67671556a815610742c7680e4c7a32bd25bf4740 /Documentation/devicetree
parent0f49fc95b86fc77b867d643e2d38bc9f28035ed4 (diff)
livepatch: make object/func-walking helpers more robust
Current object-walking helper checks the presence of obj->funcs to determine the end of objs array in klp_object structure. This is somewhat fragile because one can easily forget about funcs definition during livepatch creation. In such a case the livepatch module is successfully loaded and all objects after the incorrect one are omitted. This is very confusing. Let's make the helper more robust and check also for the other external member, name. Thus the helper correctly stops on an empty item of the array. We need to have a check for obj->funcs in klp_init_object() to make it work. The same applies to a func-walking helper. As a benefit we'll check for new_func member definition during the livepatch initialization. There is no such check anywhere in the code now. [jkosina@suse.cz: fix shortlog] Signed-off-by: Miroslav Benes <mbenes@suse.cz> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Acked-by: Jessica Yu <jeyu@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'Documentation/devicetree')