return count;
        }
        if (!strcmp(name, "flag")) {
+               bool disable = false;
                __u32 flag;
                char f[32];
-               bool disable = false;
+               char *end;
 
                memset(f, 0, 32);
                len = strn_len(&user_buffer[i], sizeof(f) - 1);
                i += len;
 
                flag = pktgen_read_flag(f, &disable);
-
                if (flag) {
                        if (disable)
                                pkt_dev->flags &= ~flag;
                        else
                                pkt_dev->flags |= flag;
-               } else {
-                       sprintf(pg_result,
-                               "Flag -:%s:- unknown\nAvailable flags, (prepend ! to un-set flag):\n%s",
-                               f,
-                               "IPSRC_RND, IPDST_RND, UDPSRC_RND, UDPDST_RND, "
-                               "MACSRC_RND, MACDST_RND, TXSIZE_RND, IPV6, "
-                               "MPLS_RND, VID_RND, SVID_RND, FLOW_SEQ, "
-                               "QUEUE_MAP_RND, QUEUE_MAP_CPU, UDPCSUM, "
-                               "NO_TIMESTAMP, "
-#ifdef CONFIG_XFRM
-                               "IPSEC, "
-#endif
-                               "NODE_ALLOC\n");
+
+                       sprintf(pg_result, "OK: flags=0x%x", pkt_dev->flags);
                        return count;
                }
-               sprintf(pg_result, "OK: flags=0x%x", pkt_dev->flags);
+
+               /* Unknown flag */
+               end = pkt_dev->result + sizeof(pkt_dev->result);
+               pg_result += sprintf(pg_result,
+                       "Flag -:%s:- unknown\n"
+                       "Available flags, (prepend ! to un-set flag):\n", f);
+
+               for (int n = 0; n < NR_PKT_FLAGS && pg_result < end; n++) {
+                       if (!IS_ENABLED(CONFIG_XFRM) && n == IPSEC_SHIFT)
+                               continue;
+                       pg_result += snprintf(pg_result, end - pg_result,
+                                             "%s, ", pkt_flag_names[n]);
+               }
+               if (!WARN_ON_ONCE(pg_result >= end)) {
+                       /* Remove the comma and whitespace at the end */
+                       *(pg_result - 2) = '\0';
+               }
+
                return count;
        }
        if (!strcmp(name, "dst_min") || !strcmp(name, "dst")) {