return string;
 }
 
-static char *get_modinfo(struct load_info *info, const char *tag)
+static char *get_next_modinfo(const struct load_info *info, const char *tag,
+                             char *prev)
 {
        char *p;
        unsigned int taglen = strlen(tag);
         * get_modinfo() calls made before rewrite_section_headers()
         * must use sh_offset, as sh_addr isn't set!
         */
-       for (p = (char *)info->hdr + infosec->sh_offset; p; p = next_string(p, &size)) {
+       char *modinfo = (char *)info->hdr + infosec->sh_offset;
+
+       if (prev) {
+               size -= prev - modinfo;
+               modinfo = next_string(prev, &size);
+       }
+
+       for (p = modinfo; p; p = next_string(p, &size)) {
                if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
                        return p + taglen + 1;
        }
        return NULL;
 }
 
+static char *get_modinfo(const struct load_info *info, const char *tag)
+{
+       return get_next_modinfo(info, tag, NULL);
+}
+
 static void setup_modinfo(struct module *mod, struct load_info *info)
 {
        struct module_attribute *attr;