aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>2011-11-15 10:29:55 -0500
committerDavid S. Miller <davem@davemloft.net>2011-11-16 17:43:10 -0500
commitc8f44affb7244f2ac3e703cab13d55ede27621bb (patch)
tree62e7aea2916a8d7cab825fe500670c5113854c0f /lib
parenta59e2ecb859f2ab03bb2e230709f8039472ad2c3 (diff)
net: introduce and use netdev_features_t for device features sets
v2: add couple missing conversions in drivers split unexporting netdev_fix_features() implemented %pNF convert sock::sk_route_(no?)caps Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib')
-rw-r--r--lib/vsprintf.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 993599e66e5..8e75003d62f 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -777,6 +777,18 @@ char *uuid_string(char *buf, char *end, const u8 *addr,
777 return string(buf, end, uuid, spec); 777 return string(buf, end, uuid, spec);
778} 778}
779 779
780static
781char *netdev_feature_string(char *buf, char *end, const u8 *addr,
782 struct printf_spec spec)
783{
784 spec.flags |= SPECIAL | SMALL | ZEROPAD;
785 if (spec.field_width == -1)
786 spec.field_width = 2 + 2 * sizeof(netdev_features_t);
787 spec.base = 16;
788
789 return number(buf, end, *(const netdev_features_t *)addr, spec);
790}
791
780int kptr_restrict __read_mostly; 792int kptr_restrict __read_mostly;
781 793
782/* 794/*
@@ -824,6 +836,7 @@ int kptr_restrict __read_mostly;
824 * Do not use this feature without some mechanism to verify the 836 * Do not use this feature without some mechanism to verify the
825 * correctness of the format string and va_list arguments. 837 * correctness of the format string and va_list arguments.
826 * - 'K' For a kernel pointer that should be hidden from unprivileged users 838 * - 'K' For a kernel pointer that should be hidden from unprivileged users
839 * - 'NF' For a netdev_features_t
827 * 840 *
828 * Note: The difference between 'S' and 'F' is that on ia64 and ppc64 841 * Note: The difference between 'S' and 'F' is that on ia64 and ppc64
829 * function pointers are really function descriptors, which contain a 842 * function pointers are really function descriptors, which contain a
@@ -896,6 +909,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
896 has_capability_noaudit(current, CAP_SYSLOG)))) 909 has_capability_noaudit(current, CAP_SYSLOG))))
897 ptr = NULL; 910 ptr = NULL;
898 break; 911 break;
912 case 'N':
913 switch (fmt[1]) {
914 case 'F':
915 return netdev_feature_string(buf, end, ptr, spec);
916 }
917 break;
899 } 918 }
900 spec.flags |= SMALL; 919 spec.flags |= SMALL;
901 if (spec.field_width == -1) { 920 if (spec.field_width == -1) {