Uploaded image for project: 'RHEL'
  1. RHEL
  2. RHEL-118249

Why "registration error [man warning::pass5] (rc -84)" shows in RHEL8.10

Linking RHIVOS CVEs to...Migration: Automation ...Sync from "Extern...XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Undefined Undefined
    • None
    • rhel-8.10
    • systemtap
    • None
    • No
    • None
    • rhel-pt-perf-tools
    • None
    • False
    • False
    • Hide

      None

      Show
      None
    • None
    • None
    • None
    • None
    • Unspecified
    • Unspecified
    • Unspecified
    • x86_64
    • None

      What were you trying to do that didn't work?

      We can see "registration error [man warning::pass5] (rc -84)" shows in RHEL8.10" with RHEL8.10 , but RHEL 9.6 work well 

       

      RHEL 8.10

      ~~~

      systemtap-4.9-3.el8.x86_64

      4.18.0-553.44.1.el8_10.x86_64

      1. stap -L 'kernel.function("skb_flow_limit")'
        kernel.function("skb_flow_limit@net/core/dev.c:4725") $qlen:unsigned int $skb:struct sk_buff*

       

      1. stap vge 'probe kernel.function("skb_flow_limit"){printf("%s %d\n",kernel_string($skb>dev->name),$qlen)}'
        Pass 1: parsed user script and 507 library scripts using 361180virt/156208res/16644shr/141584data kb, in 990usr/270sys/1285real ms.
        Pass 2: analyzed script: 1 probe, 3 functions, 0 embeds, 0 globals using 429964virt/226520res/17828shr/210368data kb, in 3620usr/220sys/3922real ms.
        Pass 3: translated to C into "/tmp/stap0BtQby/stap_d959725eae59bfcf193987751a604be0_2064_src.c" using 429964virt/226712res/18020shr/210368data kb, in 10usr/10sys/19real ms.
        Pass 4: compiled C into "stap_d959725eae59bfcf193987751a604be0_2064.ko" in 7780usr/6360sys/13409real ms.
        Pass 5: starting run.
        WARNING: probe kernel.function("skb_flow_limit@net/core/dev.c:4725") (address 0xffffffff9ae4a566) registration error [man warning::pass5] (rc -84)

      ~~~

      codes from RHEL8 

      ~~~
       
      static bool skb_flow_limit(struct sk_buff *skb, unsigned int qlen)
      {
      #ifdef CONFIG_NET_FLOW_LIMIT
      struct sd_flow_limit *fl;
      struct softnet_data *sd;
      unsigned int old_flow, new_flow;
       
      if (qlen < (netdev_max_backlog >> 1))
      return false;
       
      sd = this_cpu_ptr(&softnet_data);
       
      rcu_read_lock();
      fl = rcu_dereference(sd->flow_limit);
      if (fl) {
      new_flow = skb_get_hash(skb) & (fl->num_buckets - 1);
      old_flow = fl->history[fl->history_head];
      fl->history[fl->history_head] = new_flow;
       
      fl->history_head++;
      fl->history_head &= FLOW_LIMIT_HISTORY - 1;
       
      if (likely(fl->buckets[old_flow]))
      fl->buckets[old_flow]--;
       
      if (++fl->buckets[new_flow] > (FLOW_LIMIT_HISTORY >> 1))

      { fl->count++; rcu_read_unlock(); return true; }

      }
      rcu_read_unlock();
      #endif
      return false;
      }
       

      ~~~

      RHEL 9.6 works well 

      ~~~

      systemtap-5.2-2.el9.x86_64

      5.14.0-570.17.1.el9_6.x86_64

       

      1. stap -L 'kernel.function("skb_flow_limit")'
        kernel.function("skb_flow_limit@net/core/dev.c:4802") $qlen:unsigned int $skb:struct sk_buff*

       

      1. stap vge 'probe kernel.function("skb_flow_limit"){printf("%s %d\n",kernel_string($skb>dev->name),$qlen)}'
        Pass 1: parsed user script and 514 library scripts using 687260virt/442592res/15488shr/426888data kb, in 4510usr/1080sys/6593real ms.
        Pass 2: analyzed script: 1 probe, 3 functions, 0 embeds, 0 globals using 794732virt/551560res/16788shr/534360data kb, in 5130usr/1250sys/7161real ms.
        Pass 3: translated to C into "/tmp/stapOkZrxe/stap_ad41e9e3a01c3495fd58b614a96fdaeb_2100_src.c" using 794732virt/551688res/16916shr/534360data kb, in 30usr/0sys/25real ms.
        Pass 4: compiled C into "stap_ad41e9e3a01c3495fd58b614a96fdaeb_2100.ko" in 9250usr/3260sys/14503real ms.
        Pass 5: starting run.
        lo 0
        lo 0

       

      ~~~

      codes from RHEL9 

      ~~~
      static bool skb_flow_limit(struct sk_buff *skb, unsigned int qlen)
      {
      #ifdef CONFIG_NET_FLOW_LIMIT
              struct sd_flow_limit *fl;
              struct softnet_data *sd;
              unsigned int old_flow, new_flow;
       
              if (qlen < (READ_ONCE(netdev_max_backlog) >> 1))
                      return false;
       
              sd = this_cpu_ptr(&softnet_data);
       
              rcu_read_lock();
              fl = rcu_dereference(sd->flow_limit);
              if (fl) {
                      new_flow = skb_get_hash(skb) & (fl->num_buckets - 1);
                      old_flow = fl->history[fl->history_head];
                      fl->history[fl->history_head] = new_flow;
       
                      fl->history_head++;
                      fl->history_head &= FLOW_LIMIT_HISTORY - 1;
       
                      if (likely(fl->buckets[old_flow]))
                              fl->buckets[old_flow]--;
       
                      if (++fl->buckets[new_flow] > (FLOW_LIMIT_HISTORY >> 1))

      {                         fl->count++;                         rcu_read_unlock();                         return true;                 }

              }
              rcu_read_unlock();
      #endif
              return false;
      }
      ~~~

      What is the impact of this issue to you?

      RHEL 8.10 register warning 

      Please provide the package NVR for which the bug is seen:

      How reproducible is this bug?:

      execute command as above 

      Steps to reproduce

      1.  
      2.  
      3.  

      Expected results

      Actual results

              rhtorsys Frank Eigler
              rhn-support-xili Xinhua Li
              Frank Eigler Frank Eigler
              Martin Cermak Martin Cermak
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated: