diff --git a/.gitignore b/.gitignore
index 4f71bcf8f9950763281db837800ca68d2e7a828e..4f4b09bc33fc386435c2eb27d1e98bec0d52470d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/go-go-1.17.7-1-openssl-fips.tar.gz
+SOURCES/go1.17.10-1-openssl-fips.tar.gz
diff --git a/.golang.metadata b/.golang.metadata
index fde600851c0a6c2a545c1d864074c1a6144df448..d401cd726cedd8e2d3303399c14edb41898c5eee 100644
--- a/.golang.metadata
+++ b/.golang.metadata
@@ -1 +1 @@
-139fe29f985b3feda50c407d194f1a102352388a SOURCES/go-go-1.17.7-1-openssl-fips.tar.gz
+f2f9f18899b59c00372c975f221c9fcb1e75b904 SOURCES/go1.17.10-1-openssl-fips.tar.gz
diff --git a/SOURCES/fix_TestScript_list_std.patch b/SOURCES/fix_TestScript_list_std.patch
index 1387cb71ca3f9caf033b87d05c22b22a1fee407b..ade3711c6807083c4076be5015919c9b1b641d72 100644
--- a/SOURCES/fix_TestScript_list_std.patch
+++ b/SOURCES/fix_TestScript_list_std.patch
@@ -1,5 +1,5 @@
 diff --git a/src/cmd/go/testdata/script/list_std.txt b/src/cmd/go/testdata/script/list_std.txt
-index 6ab1bd1674..4a00e436fd 100644
+index 6ab1bd1..4a00e43 100644
 --- a/src/cmd/go/testdata/script/list_std.txt
 +++ b/src/cmd/go/testdata/script/list_std.txt
 @@ -6,7 +6,7 @@ env GO111MODULE=off
diff --git a/SOURCES/go1.5-zoneinfo_testing_only.patch b/SOURCES/go1.5-zoneinfo_testing_only.patch
index 581cb948848ef8a78bbd8642c3c7dd6e00b09fb9..d6abe20ad48570a3719cf390ee2b51449eb875d3 100644
--- a/SOURCES/go1.5-zoneinfo_testing_only.patch
+++ b/SOURCES/go1.5-zoneinfo_testing_only.patch
@@ -1,6 +1,7 @@
-diff -up go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/internal_test.go.time go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/internal_test.go
---- go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/internal_test.go.time	2017-12-05 01:10:10.000000000 +0100
-+++ go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/internal_test.go	2017-12-05 14:55:10.574637475 +0100
+diff --git a/src/time/internal_test.go b/src/time/internal_test.go
+index 87a4208..0923e75 100644
+--- a/src/time/internal_test.go
++++ b/src/time/internal_test.go
 @@ -4,13 +4,15 @@
  
  package time
@@ -29,10 +30,11 @@ diff -up go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/internal_test.go.t
  	if zipOnly {
  		zoneSources = zoneSources[len(zoneSources)-1:]
  	}
-diff -up go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_test.go.time go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_test.go
---- go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_test.go.time	2017-12-05 01:10:10.000000000 +0100
-+++ go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_test.go	2017-12-05 14:58:09.823109248 +0100
-@@ -8,6 +8,7 @@ import (
+diff --git a/src/time/zoneinfo_test.go b/src/time/zoneinfo_test.go
+index f032aa7..e3e5547 100644
+--- a/src/time/zoneinfo_test.go
++++ b/src/time/zoneinfo_test.go
+@@ -9,6 +9,7 @@ import (
  	"fmt"
  	"os"
  	"reflect"
@@ -40,7 +42,7 @@ diff -up go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_test.go.t
  	"testing"
  	"time"
  )
-@@ -128,7 +129,7 @@ func TestLoadLocationFromTZData(t *testi
+@@ -137,7 +138,7 @@ func TestLoadLocationFromTZData(t *testing.T) {
  		t.Fatal(err)
  	}
  
@@ -49,10 +51,11 @@ diff -up go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_test.go.t
  	if err != nil {
  		t.Fatal(err)
  	}
-diff -up go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_unix.go.time go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_unix.go
---- go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_unix.go.time	2017-12-05 01:10:10.000000000 +0100
-+++ go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_unix.go	2017-12-05 14:55:10.574637475 +0100
-@@ -12,7 +12,6 @@
+diff --git a/src/time/zoneinfo_unix.go b/src/time/zoneinfo_unix.go
+index 4ea029d..e887769 100644
+--- a/src/time/zoneinfo_unix.go
++++ b/src/time/zoneinfo_unix.go
+@@ -13,7 +13,6 @@
  package time
  
  import (
@@ -60,7 +63,7 @@ diff -up go-dd7cbf3a846c2cb125ac65173abaf6a8b9f903ff/src/time/zoneinfo_unix.go.t
  	"syscall"
  )
  
-@@ -22,7 +21,6 @@ var zoneSources = []string{
+@@ -23,7 +22,6 @@ var zoneSources = []string{
  	"/usr/share/zoneinfo/",
  	"/usr/share/lib/zoneinfo/",
  	"/usr/lib/locale/TZ/",
diff --git a/SOURCES/remove_waitgroup_misuse_tests.patch b/SOURCES/remove_waitgroup_misuse_tests.patch
deleted file mode 100644
index b643563ff8abd8052c8724d08c7301c9ec3d9a31..0000000000000000000000000000000000000000
--- a/SOURCES/remove_waitgroup_misuse_tests.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-diff --git a/src/sync/waitgroup_test.go b/src/sync/waitgroup_test.go
-index c569e0faa2eb..4ded218d2d8d 100644
---- a/src/sync/waitgroup_test.go
-+++ b/src/sync/waitgroup_test.go
-@@ -5,8 +5,6 @@
- package sync_test
- 
- import (
--	"internal/race"
--	"runtime"
- 	. "sync"
- 	"sync/atomic"
- 	"testing"
-@@ -48,12 +46,6 @@ func TestWaitGroup(t *testing.T) {
- 	}
- }
- 
--func knownRacy(t *testing.T) {
--	if race.Enabled {
--		t.Skip("skipping known-racy test under the race detector")
--	}
--}
--
- func TestWaitGroupMisuse(t *testing.T) {
- 	defer func() {
- 		err := recover()
-@@ -68,124 +60,6 @@ func TestWaitGroupMisuse(t *testing.T) {
- 	t.Fatal("Should panic")
- }
- 
--// pollUntilEqual blocks until v, loaded atomically, is
--// equal to the target.
--func pollUntilEqual(v *uint32, target uint32) {
--	for {
--		for i := 0; i < 1e3; i++ {
--			if atomic.LoadUint32(v) == target {
--				return
--			}
--		}
--		// yield to avoid deadlock with the garbage collector
--		// see issue #20072
--		runtime.Gosched()
--	}
--}
--
--func TestWaitGroupMisuse2(t *testing.T) {
--	knownRacy(t)
--	if runtime.NumCPU() <= 4 {
--		t.Skip("NumCPU<=4, skipping: this test requires parallelism")
--	}
--	defer func() {
--		err := recover()
--		if err != "sync: negative WaitGroup counter" &&
--			err != "sync: WaitGroup misuse: Add called concurrently with Wait" &&
--			err != "sync: WaitGroup is reused before previous Wait has returned" {
--			t.Fatalf("Unexpected panic: %#v", err)
--		}
--	}()
--	defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4))
--	done := make(chan interface{}, 2)
--	// The detection is opportunistic, so we want it to panic
--	// at least in one run out of a million.
--	for i := 0; i < 1e6; i++ {
--		var wg WaitGroup
--		var here uint32
--		wg.Add(1)
--		go func() {
--			defer func() {
--				done <- recover()
--			}()
--			atomic.AddUint32(&here, 1)
--			pollUntilEqual(&here, 3)
--			wg.Wait()
--		}()
--		go func() {
--			defer func() {
--				done <- recover()
--			}()
--			atomic.AddUint32(&here, 1)
--			pollUntilEqual(&here, 3)
--			wg.Add(1) // This is the bad guy.
--			wg.Done()
--		}()
--		atomic.AddUint32(&here, 1)
--		pollUntilEqual(&here, 3)
--		wg.Done()
--		for j := 0; j < 2; j++ {
--			if err := <-done; err != nil {
--				panic(err)
--			}
--		}
--	}
--	t.Fatal("Should panic")
--}
--
--func TestWaitGroupMisuse3(t *testing.T) {
--	knownRacy(t)
--	if runtime.NumCPU() <= 1 {
--		t.Skip("NumCPU==1, skipping: this test requires parallelism")
--	}
--	defer func() {
--		err := recover()
--		if err != "sync: negative WaitGroup counter" &&
--			err != "sync: WaitGroup misuse: Add called concurrently with Wait" &&
--			err != "sync: WaitGroup is reused before previous Wait has returned" {
--			t.Fatalf("Unexpected panic: %#v", err)
--		}
--	}()
--	defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4))
--	done := make(chan interface{}, 3)
--	// The detection is opportunistically, so we want it to panic
--	// at least in one run out of a million.
--	for i := 0; i < 1e6; i++ {
--		var wg WaitGroup
--		wg.Add(1)
--		go func() {
--			defer func() {
--				done <- recover()
--			}()
--			wg.Done()
--		}()
--		go func() {
--			defer func() {
--				done <- recover()
--			}()
--			wg.Wait()
--			// Start reusing the wg before waiting for the Wait below to return.
--			wg.Add(1)
--			go func() {
--				wg.Done()
--			}()
--			wg.Wait()
--		}()
--		go func() {
--			defer func() {
--				done <- recover()
--			}()
--			wg.Wait()
--		}()
--		for j := 0; j < 3; j++ {
--			if err := <-done; err != nil {
--				panic(err)
--			}
--		}
--	}
--	t.Fatal("Should panic")
--}
--
- func TestWaitGroupRace(t *testing.T) {
- 	// Run this test for about 1ms.
- 	for i := 0; i < 1000; i++ {
diff --git a/SOURCES/skip_test_rhbz1939923.patch b/SOURCES/skip_test_rhbz1939923.patch
index 80302d09405fedb227a0bce5e2d84f5c7c30f50c..c9ff600d4849dcbd10a4523c4059c99b0cd13950 100644
--- a/SOURCES/skip_test_rhbz1939923.patch
+++ b/SOURCES/skip_test_rhbz1939923.patch
@@ -1,5 +1,5 @@
 diff --git a/src/crypto/x509/x509_test.go b/src/crypto/x509/x509_test.go
-index 51dda16815..2d1e1b1e6e 100644
+index f32dc7d..54db97c 100644
 --- a/src/crypto/x509/x509_test.go
 +++ b/src/crypto/x509/x509_test.go
 @@ -2880,6 +2880,7 @@ func (bs *brokenSigner) Sign(_ io.Reader, _ []byte, _ crypto.SignerOpts) ([]byte
diff --git a/SPECS/golang.spec b/SPECS/golang.spec
index 06c5d7b05b1193dbece75c27179b56927f9f0d70..c62da57078a8d359fe55fecffab0215a23ff176f 100644
--- a/SPECS/golang.spec
+++ b/SPECS/golang.spec
@@ -96,7 +96,7 @@
 %endif
 
 %global go_api 1.17
-%global go_version 1.17.7
+%global go_version 1.17.10
 %global pkg_release 1
 
 Name:           golang
@@ -106,8 +106,9 @@ Summary:        The Go Programming Language
 # source tree includes several copies of Mark.Twain-Tom.Sawyer.txt under Public Domain
 License:        BSD and Public Domain
 URL:            http://golang.org/
-Source0:        https://pagure.io/go/archive/go-%{go_version}-%{pkg_release}-openssl-fips/go-go-%{go_version}-%{pkg_release}-openssl-fips.tar.gz
 # make possible to override default traceback level at build time by setting build tag rpm_crashtraceback
+Source0:         https://github.com/golang-fips/go/archive/refs/tags/go%{go_version}-%{pkg_release}-openssl-fips.tar.gz
+
 Source1:        fedora.go
 
 # The compiler is written in Go. Needs go(1.4+) compiler for build.
@@ -142,11 +143,6 @@ Patch221:       fix_TestScript_list_std.patch
 
 Patch1939923:   skip_test_rhbz1939923.patch
 
-# These tests has been removed upstream due to
-# nondeterministic flakiness
-# https://bugzilla.redhat.com/show_bug.cgi?id=2028662
-Patch2028662: 	remove_waitgroup_misuse_tests.patch
-
 # Having documentation separate was broken
 Obsoletes:      %{name}-docs < 1.1-4
 
@@ -234,7 +230,7 @@ Requires:       %{name} = %{version}-%{release}
 %endif
 
 %prep
-%setup -q -n go-go-%{go_version}-%{pkg_release}-openssl-fips
+%setup -q -n go-go%{go_version}-%{pkg_release}-openssl-fips
 
 %patch215 -p1
 
@@ -242,8 +238,6 @@ Requires:       %{name} = %{version}-%{release}
 
 %patch1939923 -p1
 
-%patch2028662 -p1
-
 cp %{SOURCE1} ./src/runtime/
 
 %build
@@ -517,6 +511,10 @@ cd ..
 %endif
 
 %changelog
+* Fri May 27 2022 David Benoit <dbenoit@redhat.com> - 1.17.10-1
+- Rebase to Go 1.17.10
+- Resolves: rhbz#2091077
+
 * Thu Feb 17 2022 David Benoit <dbenoit@redhat.com> - 1.17.7-1
 - Rebase to Go 1.17.7
 - Remove fips memory leak patch (fixed in tree)